我知道如何复制工作表,但这将导致多个工作表。我需要的是一个输出工作表,一个接一个地包含所有的工作表。
目前我正在做的是将每个工作表导出为< code>DataTable,然后逐个导入:
string[] files = { "Book1.xlsx", "Book2.xlsx", "Book3.xlsx" };
var destination = new ExcelFile();
var destinationSheet = destination.Worksheets.Add("Sheets");
int startRow = 0;
foreach (string file in files)
{
var source = ExcelFile.Load(file);
foreach (var sourceSheet in source.Worksheets)
{
var table = sourceSheet.CreateDataTable(new CreateDataTableOptions());
destinationSheet.InsertDataTable(table, new InsertDataTableOptions() { StartRow = startRow });
startRow += table.Rows.Count;
}
}
destination.Save("Merged Output.xlsx");
但这样,我就失去了单元格样式和文本格式
有没有办法用DataTable
保留样式?
编辑(2022-10-28):
在当前最新版本的geBox.电子表格中,还有另一组CellRange. CopyTo()
重载方法,它们接受CopyOptions
参数,您可以使用该参数指定要复制的内容。
例如,您可以指定还希望复制列宽和行高,如下所示:
range.CopyTo(destinationSheet, destinationSheet.Rows.Count, 0,
new CopyOptions() { CopyTypes = CopyTypes.Default | CopyTypes.ColumnWidths | CopyTypes.RowHeights });
原件:
为此,您可以使用 CellRange.CopyTo
方法,如下所示:
string[] files = { "Book1.xlsx", "Book2.xlsx", "Book3.xlsx" };
var destination = new ExcelFile();
var destinationSheet = destination.Worksheets.Add("Sheets");
foreach (string file in files)
{
var source = ExcelFile.Load(file);
foreach (var sourceSheet in source.Worksheets)
{
var range = sourceSheet.GetUsedCellRange(true);
range.CopyTo(destinationSheet, destinationSheet.Rows.Count, 0);
}
}
destination.Save("Merged Output.xlsx");
请注意,CopyTo
将仅复制单元格的值和样式。
但如果需要,也可以使用类似的方法来复制列宽和行高。
string[] files = { "Book1.xlsx", "Book2.xlsx", "Book3.xlsx" };
var destination = new ExcelFile();
var destinationSheet = destination.Worksheets.Add("Sheets");
int lastColumn = 0;
foreach (string file in files)
{
var source = ExcelFile.Load(file);
foreach (var sourceSheet in source.Worksheets)
{
var range = sourceSheet.GetUsedCellRange(true);
int startRow = destinationSheet.Rows.Count;
range.CopyTo(destinationSheet, startRow, 0);
for (int r = 0; r < range.Height; r++)
destinationSheet.Rows[r + startRow].Height = sourceSheet.Rows[r].Height;
for (; lastColumn < range.Width; lastColumn++)
destinationSheet.Columns[lastColumn].Width = sourceSheet.Columns[lastColumn].Width;
}
}
destination.Save("Merged Output.xlsx");
如果需要,你也可以用这个答案来复制图片。
您也可以使用相同的解决方案来复制形状和图表,它们都具有复制后需要调整的位置
属性。
所以我有 1500 个 Excel 工作簿,每个工作簿都有 10 张结构完全相同的工作表。我尝试将多个Excel工作簿合并到一个文件中,并使用以下代码成功: 谢谢,努尔贝克
我有一个Excel工作簿,其中包含36个不同的工作表,我每两周收到一次,工作表在所有标签上都有共同的标题,并且每个标签上都有不同的唯一标题,但每条记录都有一个唯一的ID,可以有多个记录。 我要做的是从所有的工作表中提取唯一的id,然后将每个工作表中的数据提取到一个工作表中,其中包含所有的公共标题和唯一标题。 我正在考虑使用下面帖子中的代码将其导入Access。连接表并将其导出回Excel中的一个工
我有30张单独的工作表,需要合并成一张有多个选项卡的工作表。我可以使用下面的脚本来完成这项工作,但每次都会创建一个新的工作表。当30张单独的工作表中的一张或全部更新时,我只希望这个脚本更新或重写以前创建的“主工作表”。 我正在寻找一个表,其中包含从每个地区的标签。这将允许我与单独更新的所有信息共享一个主控表。
我在同一个excel表中有3000个类似于这些表的表: PS:我只需要csv表中指定的信息
本文向大家介绍Python将多个excel表格合并为一个表格,包括了Python将多个excel表格合并为一个表格的使用技巧和注意事项,需要的朋友参考一下 生活中经常会碰到多个excel表格汇总成一个表格的情况,比如你发放了一份表格让班级所有同学填写,而你负责将大家的结果合并成一个。诸如此类的问题有很多。除了人工将所有表格的内容一个一个复制到汇总表格里,那么如何用Python自动实现这些工作呢~
然后另一个问题是工作簿的名称都不同,所有300个。是否有一个宏可以复制我打开的工作簿,而不是每次都输入实际的名称?