当您需要汇总存储在多个 Excel 文件中的数据时,合并 Excel 文件是一项必不可少的任务。 例如,如果您有一年中每个季度的销售报告,您可能需要将它们合并到一个文件中以获得更全面的全年数据视图。通过合并 Excel 文件,您可以专注于单个有组织的工作簿,而不是在多个文件之间切换。这不仅简化了您的工作流程还提高了工作效率。在本文中,您将学习如何使用 Spire.XLS for C++ 将 Excel 文件合并为一个文件。
安装 Spire.XLS for C++
有两种方法可以将 Spire.XLS for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.XLS for C++ 集成到 C++ 程序中
将多个 Excel 工作簿合并到一个 Excel 文档
通过创建新的工作簿,然后将原始工作簿中的工作表复制到新工作簿,就可以将多个 Excel 工作簿合并为一个工作簿。具体步骤如下:
- 将原始工作簿的路径放入向量中。
- 初始化一个 Workbook 对象以创建一个新工作簿并清除其中的默认工作表。
- 初始化一个临时工作簿对象。
- 遍历向量中的工作簿。
- 使用 Workbook->LoadFromFile() 方法将工作簿加载到临时工作簿对象中。
- 遍历工作簿中的工作表,然后使用 Workbook->GetWorksheets()->AddCopy() 方法将每个工作表从工作簿复制到新工作簿。
- 使用 Workbook->SaveToFile() 方法将结果工作簿保存到文件。
- C++
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
using namespace std;
int main()
{
//将工作簿的路径放入向量中
std::vector<std::wstring> files = { L"文档1.xlsx", L"文档2.xlsx", L"文档3.xlsx" };;
//初始化工作簿对象以创建新工作簿
Workbook* newWorkbook = new Workbook();
newWorkbook->SetVersion(ExcelVersion::Version2013);
//清除默认工作表
newWorkbook->GetWorksheets()->Clear();
//初始化临时工作簿对象
Workbook* tempWorkbook = new Workbook();
//在矢量中遍历工作簿
for (auto file : files)
{
//加载当前工作簿
tempWorkbook->LoadFromFile(file.c_str());
//遍历工作簿中的所有工作表
for (int i = 0; i < tempWorkbook->GetWorksheets()->GetCount(); i++)
{
Worksheet* sheet = tempWorkbook->GetWorksheets()->Get(i);
//将工作簿中的每个工作表复制到新工作簿
(dynamic_cast<XlsWorksheetsCollection*>(newWorkbook->GetWorksheets()))->AddCopy(sheet, WorksheetCopyType::CopyAll);
}
}
//将结果工作簿保存到文件
newWorkbook->SaveToFile(L"合并Excel文件.xlsx", ExcelVersion::Version2013);
newWorkbook->Dispose();
tempWorkbook->Dispose();
delete newWorkbook;
delete tempWorkbook;
}
将多个 Excel 工作表合并为一张工作表
通过将原始工作表中使用的数据区域复制到目标工作表,可以将多个工作表合并为一个工作表。以下步骤演示了如何将同一工作簿中的两个工作表合并为一个工作表:
- 初始化一个 Workbook 对象并使用 Workbook->LoadFromFile() 方法加载一个 Excel 工作簿。
- 使用 Workbook->GetWorksheets()->Get(int index) 方法获取需要合并的两个工作表(这里的工作表索引是从零开始的)。
- 使用 Worksheet->GetAllocatedRange() 方法获取第二个工作表的使用范围。
- 使用 Worksheet->GetRange(int row, int column) 方法在第一个工作表中指定目标范围(此处的行和列索引从1开始)。
- 使用 CellRange->Copy(CellRange destRange) 方法将第二个工作表的使用范围复制到第一个工作表中的目标范围。
- 使用 XlsWorksheet->Remove() 方法从工作簿中删除第二个工作表。
- 使用 Workbook->SaveToFile() 方法将结果工作簿保存到文件。
- C++
#include "Spire.Xls.o.h";
using namespace Spire::Xls;
using namespace std;
int main()
{
//初始化工作簿对象
Workbook* workbook = new Workbook();
//加载Excel工作簿
workbook->LoadFromFile(L"示例文档.xlsx");
//获取第一个工作表
Worksheet* sheet1 = workbook->GetWorksheets()->Get(0);
//获取第二个工作表
Worksheet* sheet2 = workbook->GetWorksheets()->Get(1);
//获取第二个工作表的使用范围
CellRange* sourceRange = sheet2->GetAllocatedRange();
//在第一个工作表中指定目标范围
CellRange* destRange = sheet1->GetRange(sheet1->GetLastRow() + 1, 1);
//将第二个工作表的使用范围复制到第一个工作表中的目标范围
sourceRange->Copy(destRange);
//删除第二个工作表
sheet2->Remove();
//保存结果文件
workbook->SaveToFile(L"MergeExcelWorksheets.xlsx", ExcelVersion::Version2013);
workbook->Dispose();
delete workbook;
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。