c# - 是否可以在没有 Office Interop 的情况下将多个 .xls 文件附加到单个 Excel 2003 工作表中?
问题描述
我有一个 ASP.NET Web API,需要为将来的版本实现此功能。具体来说:
- 几个 .xls 文件将放置在一个临时文件夹中。它们具有相同的宽度但不同的高度,以及不同的行和列大小。
- 这些文件需要附加到一个 .xls 文件中
- 最终的 excel 不能有多个工作表。
- 无法使用 Office 互操作库,因为未安装 Office,也无法在部署环境中安装。
有没有办法在不使用指定的办公室互操作库或任何付费第三方库(非常欢迎免费第三方库)的情况下做到这一点?
解决方案
从NuGet安装 Spire.XLS :Install-Package Spire.XLS -Version 9.6.7
Spire.XLS 提供了两种将 excel 文件合并到单个 excel 工作表中的方法:
1. 使用 CellRange.Copy() 将 excel 与样式合并
static void Main(string[] args)
{
string outputPath = "output.xls";
List<string> files = new List<string>();
files.Add(@"File1.xls");
files.Add(@"File2.xls");
CombineFiles(files, outputPath);
}
private static void CombineFiles(List<string> files, string outputPath)
{
Spire.Xls.Workbook resultworkbook = new Spire.Xls.Workbook();
resultworkbook.Worksheets.Clear();
Spire.Xls.Worksheet resultworksheet = resultworkbook.Worksheets.Add("worksheet");
Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
for (int i = 0; i < files.Count; i++)
{
workbook.LoadFromFile(files[i]);
Worksheet sheet = workbook.Worksheets[0];
if (i == 0)
{
sheet.AllocatedRange.Copy(resultworksheet.Range[1, 1], true, true);
}
else
{
sheet.AllocatedRange.Copy(resultworksheet.Range[resultworksheet.LastRow + 1, 1], true, true);
}
}
resultworkbook.SaveToFile(outputPath, ExcelVersion.Version97to2003);
}
2.使用DataTable合并不带样式的excel
Workbook workbook1 = new Workbook();
//load the first workbook
workbook1.LoadFromFile(FilePath1);
//load the second workbook
Workbook workbook2 = new Workbook();
workbook2.LoadFromFile(FilePath2);
//load the third workbook
Workbook workbook3 = new Workbook();
workbook3.LoadFromFile(FilePath3);
//import the second and third workbook's first worksheet into the first workbook using datatable
Worksheet sheet1 = workbook1.Worksheets[0];
Worksheet sheet2 = workbook2.Worksheets[0];
Worksheet sheet3 = workbook3.Worksheets[0];
DataTable dataTable1 = sheet2.ExportDataTable();
DataTable dataTable2 = sheet3.ExportDataTable();
sheet1.InsertDataTable(dataTable1, false, sheet1.LastRow + 1, 1);
sheet1.InsertDataTable(dataTable2, false, sheet1.LastRow + 1, 1);
workbook1.SaveToFile(OutputPath + "Merged.xls", ExcelVersion.Version97to2003);
推荐阅读
- java - 无法在 android studios 上使用 back4app 将文件保存到当前用户
- html - 启动 https 失败,没有 pid 文件
- javascript - 表单在提交时重置存储的组件
- java - 如何在 Play Store android appium 中单击搜索字段?
- python - re.sub 无法识别 Excel 值集中的空格
- javascript - OT.Publisher 访问被拒绝:最终用户拒绝访问硬件设备 getUserMedia
- c++ - 为什么将它们放入循环时会得到错误的数字?
- python - 如何过滤过滤的数据?
- python - PostParameters 列表(Python 请求)
- javascript - 我在云功能中的计时器在第二次通话后停止