如何合并多个工作表中 excel 中的数据?

how to consolidate data in excel from multiple worksheets?

我必须将工作sheet和工作sheet 1 数据合并为一个sheet。我尝试了 FileStream 方法打开文件并从那里读取数据并将其粘贴到目标工作sheet.

    Qdv.UserApi.IWbs WBS = es.CurrentVersion.Wbs;
            System.Data.DataTable Tasks = WBS.GetFullData(true, new Qdv.UserApi.LocationOfTotals());

            // Create a new workbook and worksheet.
            SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook();
            SpreadsheetGear.IWorksheet worksheet = workbook.Worksheets["Sheet1"];

            // Get the top left cell for the DataTable.
            SpreadsheetGear.IRange range = worksheet.Cells["A1"];
            

            // Copy the DataTable to the worksheet range.
            range.CopyFromDataTable(Tasks, SpreadsheetGear.Data.SetDataFlags.None);

            //Auto size all worksheet columns which contain data.
            worksheet.UsedRange.Columns.AutoFit();
            worksheet.Name = "WBS Details";
            



            SpreadsheetGear.IWorkbook WBK = es.GetActiveMinuteWorkbook(true);
            SpreadsheetGear.IWorksheet worksheet1 = WBK.Worksheets[0];
            worksheet1.Name = "Minutes Details";

你的问题有点不清楚什么是源 sheet 和目标 sheet,以及你打算将内容复制到目标 sheet 的确切位置。所以现在我将提供一个关于如何将一个范围复制到另一个范围的更笼统的答案。如果您需要更清楚地了解您的特定情况,请使用更多代码或伪代码更新您的 post 以明确您的意图。

一般来说,您可以使用 IRange。Copy(...) to copy one range to another, which can include from one sheet to another. You can use IWorksheet.UsedRange 来获取作品中“已使用”的部分sheet,在您的情况下,这可能有助于找出“来源”要复制的范围以及找出与目标相关的位置 sheet 的使用范围将源范围复制到的位置。

例如,下面的示例代码从“src”作品sheet中获取UsedRange,并将其直接复制到“dest”作品sheet的UsedRange之下:

// Get source workbook, worksheet, used range.
IWorkbook srcWorkbook = Factory.GetWorkbook("...");
IWorksheet srcWorksheet = srcWorkbook.Worksheets["Sheet1"];
IRange srcUsedRange = srcWorksheet.UsedRange;

// Get destination workbook, worksheet, used range.
IWorkbook destWorkbook = Factory.GetWorkbook("...");
IWorksheet destWorksheet = destWorkbook.Worksheets["Sheet1"];
IRange destUsedRange = destWorksheet.UsedRange;

// Get the number of rows in the destination used range.
int destUsedRangeRowCount = destUsedRange.RowCount;

// Use the IRange[...] indexer to create a new IRange that represents the cell
// immediately below "destUsedRange" and in the same first column.  So if
// "destUsedRange" is A1:D15, then "destRange" would be A16.
IRange destRange = destUsedRange[destUsedRangeRowCount, 0];

// Copy source range to destination range.
srcUsedRange.Copy(destRange);