当您需要创建类似的工作表或希望在不影响原始工作表的情况下对工作表进行更改时,复制工作表是非常有效的方法之一。此功能可以为您节省大量时间和精力,因为它允许您快速重用现有工作表中的数据、公式、格式和布局等信息,而无需从头开始创建新的工作表。本文将介绍如何使用 Spire.XLS for C++ 在 C++ 中复制 Excel 中的工作表。
安装 Spire.XLS for C++
有两种方法可以将 Spire.XLS for C++ 集成到您的应用程序中。一种方法是通过 NuGet 安装它,另一种方法是从我们的网站下载包并将库复制到您的程序中。通过 NuGet 安装更简单,更推荐使用。您可以通过访问以下链接找到更多详细信息。
如何将 Spire.XLS for C++ 集成到 C++ 程序中
在同一工作簿中复制工作表
您可以在同一工作簿中复制工作表,方法是将新工作表添加到工作簿中,然后将工作表复制到新工作表中。
以下步骤演示了如何在同一工作簿中复制工作表:
- 初始化 Workbook 类的实例。
- 使用 Workbook->LoadFromFile(LPCWSTR_S name) 方法加载 Excel 工作簿。
- 使用 Workbook->GetWorksheets()->Get(int index) 方法获取特定的工作表。
- 使用 Workbook->GetWorksheets()->Add(LPCWSTR_S name) 方法将新工作表添加到工作簿中。
- 使用 Worksheet->CopyFrom(Worksheet* worksheet) 方法将特定工作表复制到新工作表中。
- 使用 Workbook->SaveToFile(LPCWSTR_S fileName, ExcelVersion version) 方法将结果工作簿保存到另一个文件。
- C++
#include "Spire.Xls.o.h"
#include <iostream>
using namespace Spire::Xls;
int main() {
std::wstring inputFile = L"D:\\VS2022项目\\安装Spire.XLS\\年度盈利情况.xlsx";
std::wstring outputFile = L"在同一工作簿中复制工作表.xlsx";
//初始化Workbook类的实例
intrusive_ptr<Workbook> workbook = new Workbook();
//加载Excel文档
workbook->LoadFromFile(inputFile.c_str());
//获取第一个和第二个工作表
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
intrusive_ptr<Worksheet> sheet1 = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Add(L"复制-年度盈利情况"));
//intrusive_ptr<CellRange> sourceRange = dynamic_pointer_cast<CellRange>(sheet->GetAllocatedRange());
intrusive_ptr<CellRange> sourceRange = CellRange::Dynamic_cast<CellRange>(sheet->GetMaxDisplayRange());
//将第一个工作表复制到第二个工作表
sheet->Copy(sourceRange, sheet1, sheet->GetFirstRow(), sheet->GetFirstColumn(), true);
//保存结果文档
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
workbook->Dispose();
}
将工作表复制到另一个工作表
若要将工作表从一个工作簿复制到另一个工作簿,您需要向目标工作簿添加一个新工作表,然后将该工作表从源工作簿复制到目标工作簿的新工作表。值得注意的是,如果要保留源工作表的源格式,则需要将源工作簿的主题复制到目标工作簿。
以下步骤演示了如何将工作表从一个工作簿复制到另一个工作簿并保留其源格式:
- 初始化 Workbook 类的实例。
- 使用 Workbook->LoadFromFile(LPCWSTR_S name) 方法加载源工作簿。
- 使用 Workbook->GetWorksheets()->Get(int index) 方法获取特定的工作表。
- 初始化 Workbook 类的实例。
- 使用 Workbook->LoadFromFile(LPCWSTR_S name) 方法加载目标工作簿。
- 使用 Workbook->GetWorksheets()->Add(LPCWSTR_S name) 方法将新工作表添加到目标工作簿。
- 使用 Worksheet->CopyFrom(Worksheet* worksheet) 方法将源工作簿的特定工作表复制到目标工作簿的新工作表。
- 使用 Workbook->CopyTheme (Workbook* srcWorkbook) 方法将主题从源工作簿复制到目标工作簿。
- 使用 Workbook->SaveToFile(LPCWSTR_S fileName, ExcelVersion version) 方法将结果工作簿保存到另一个文件。
- C++
#include "Spire.Xls.o.h"
#include <iostream>
using namespace std;
using namespace Spire::Xls;
int main() {
std::wstring inputFile = L"D:\\VS2022项目\\安装Spire.XLS\\年度盈利情况.xlsx";
std::wstring outputFile = L"将工作表复制到另一个XLS文件.xlsx";
//初始化Workbook类的实例
intrusive_ptr<Workbook> workbook = new Workbook();
//加载Excel文档
workbook->LoadFromFile(inputFile.c_str());
//获取特定的工作表
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(0));
//创建另一个工作簿
intrusive_ptr<Workbook> workbook1 = new Workbook();
//获取工作簿中的第一张工作表
intrusive_ptr<Worksheet> sheet1 = dynamic_pointer_cast<Worksheet>(workbook1->GetWorksheets()->Get(0));
//将工作表复制到另一个Excel文件中的目标工作表
sheet1->CopyFrom(sheet);
//保存文档
workbook1->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
}
将可见工作表复制到新工作簿
如果您只想与他人共享可见工作表,而不是整个工作簿,那么可以将可见工作表复制到一个新的工作簿中。
以下步骤演示了如何将一个工作簿中的可见工作表复制到一个新的工作簿中:
- 初始化 Workbook 类的实例。
- 使用 Workbook->LoadFromFile(LPCWSTR_S name) 方法加载源工作簿。
- 初始化 Workbook 类的实例以创建新工作簿,然后使用 Workbook->GetWorksheets()->Clear() 方法清除新工作簿中的默认工作表。
- 遍历源工作簿中的所有工作表。
- 使用 XlsWorksheetBase->GetVisibility() 方法检查当前工作表是否可见。
- 如果结果为 true,请使用 Workbook->GetWorksheets()->Add(LPCWSTR_S name) 方法将新工作表添加到新工作簿中。
- 使用 Worksheet->CopyFrom(Worksheet* worksheet) 方法将工作表从源工作簿复制到新工作簿的新工作表。
- 使用 Workbook->CopyTheme (Workbook* srcWorkbook) 方法将主题从源工作簿复制到新工作簿。
- 使用 Workbook->SaveToFile(LPCWSTR_S fileName, ExcelVersion version) 方法将新工作簿保存到另一个文件。
- C++
#include "Spire.Xls.o.h"
#include <iostream>
using namespace std;
using namespace Spire::Xls;
int main() {
std::wstring inputFile = L" D:\\VS2022项目\\安装Spire.XLS\\年度盈利情况.xlsx ";
std::wstring outputFile = L"复制可见工作表.xlsx";
//初始化Workbook类的实例
intrusive_ptr<Workbook> workbook = new Workbook();
//加载源工作簿
workbook->LoadFromFile(inputFile.c_str());
//新建一个工作簿
intrusive_ptr<Workbook> workbookNew = new Workbook();
workbookNew->SetVersion(ExcelVersion::Version2013);
workbookNew->GetWorksheets()->Clear();
//循环遍历工作表
for (int i = 0; i < workbook->GetWorksheets()->GetCount(); i++)
{
intrusive_ptr<Worksheet> sheet = dynamic_pointer_cast<Worksheet>(workbook->GetWorksheets()->Get(i));
//判断工作表是否可见
if (sheet->GetVisibility() == WorksheetVisibility::Visible)
{
//将工作表复制到新工作簿
wstring name = sheet->GetName();
workbookNew->GetWorksheets()->AddCopy(sheet);
}
}
//保存文档
workbook->SaveToFile(outputFile.c_str(), ExcelVersion::Version2013);
workbook->Dispose();
}
申请临时 License
如果您希望删除结果文档中的评估消息,或者摆脱功能限制,请该Email地址已收到反垃圾邮件插件保护。要显示它您需要在浏览器中启用JavaScript。获取有效期 30 天的临时许可证。