将数据附加到现有工作表的最佳方式

The best way to append data to an existing worksheet

我有一个用于汇总发票数据的工作簿。每个月我的数据库中的新数据都需要添加到工作表末尾的新列中。

此外,额外的信息是手动添加到此工作表中的,因此无法每月完全重新生成工作簿。

我假设为了避免完全重新生成工作簿,我需要打开现有文件作为我的 opentbs 模板;是否有可能让 opentbs 将新数据合并到下一个可用列中,如果可以,那么我应该把我的标签放在哪里?我可以预先填充月份名称,然后合并到适当的名称下方吗?

更好/更合适的方法是将数据合并到一个完全独立的(并且可能是隐藏的)工作表上,并编写一个 VB 宏,该宏在文档打开时触发,以将合并的数据移动到它的最终静止状态地点?

Sub AddDataToEnd()
dim wb as workbook
set wb = workbooks.open("c:\test\myfile.xls") 'name and path of file
dim target as range
with wb.worksheets(1) 'assume data is to be added to first sheet
    set target = .cells(1,.usedrange.columns.count +1)
    'target is now pointing to the first unused column to the right, row 1
    target = format(date(),"mmm") 'write today's month into that cell
   'etc..
end with

您可以使用 OpenTBS 合并跨列中的数据sheet,但只能合并一行。使用 block=tbs:cell。 但实际上目前还不可能真正用 OpenTBS 合并 spreadsheet 中的列中的数据,因为列在 XML.

中没有明确定义。

解决方法是使用行中数据的 sheet,并使用公式在另一个 sheet 中的列中显示这些数据。

因为你有行中的数据。这是(下面)如何通过合并块顺序插入行的示例。

此示例假设您在数据集底部有一个用 block=tbs:row 定义的块 'b'。

// select the sheet with data in rows
$TBS->PlugIn(OPENTBS_SELECT_SHEET, 'the_sheet');

// insert copy of block 'b' just before it and named 'bz'
$def = $TBS->GetBlockSource('b', false, true);
$def = st_replace('[b.', '[bz.', $def);
$TBS->GetBlockSource('b', false, true, $def);

// Merge bz
$TBS->MergeBlock('bz', $data);