c# - 如何将多个工作表合并为具有样式的单个工作表
问题描述
我知道,关于这个话题有很多问题,但我没有找到可用的解决方案。
我有多个 excel 文件,每个文件都有一个工作表,我想将工作表合并到一个工作簿和具有所有样式(列宽、单元格边框、填充颜色、字体大小等)的工作表。
我该怎么做,我尝试了 Spire.Xls,但样式没有复制。
private void CombineFiles(List<string> files,string outputPath)
{
Spire.Xls.Workbook resultworkbook = new Spire.Xls.Workbook();
Spire.Xls.Worksheet resultworksheet = resultworkbook.Worksheets.Add("worksheet");
foreach (var file in files)
{
Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
workbook.LoadFromFile(file);
Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
System.Data.DataTable dataTable = sheet.ExportDataTable();
resultworksheet.InsertDataTable(dataTable, false, sheet.LastRow + 1, 1);
}
resultworkbook.SaveToFile(outputPath);
System.Diagnostics.Process.Start(outputPath);
}
解决方案
如果要在将多个工作表合并到一个工作表时复制样式,则应使用CellRange.Copy() / Worksheet.Copy()而不是 Worksheet.InsertDataTable()。另请注意,无法复制列宽,如果所有列宽都相同,则可以获取列宽然后设置为复制的列。
试试下面的代码:
static void Main(string[] args)
{
string outputPath = "output.xlsx";
List<string> files = new List<string>();
files.Add(@"File1.xlsx");
files.Add(@"File2.xlsx");
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.Version2013);
System.Diagnostics.Process.Start(outputPath);
}
推荐阅读
- azure-ad-b2c - Azure B2C 服务条款流程 - 存储文本和可合法验证的用户协议
- reactjs - FirebaseUI React:允许用户在不提供名字/姓氏的情况下通过电子邮件+密码进行注册
- xamarin - 在 MVVM 中使用带有 ObservableCollection 的 SearchBar
- flutter - 如何在颤振中添加另一个可重新排序的列表视图
- operation - 这条线有多少基本操作?
- c++ - 在 ABC C++ 中修改重载的 << 运算符
- html - 如何在我的网站上放大收藏图片。我使用shopify电子商务
- r - 使用 mutate_at() 从单个变量的值创建多个二进制变量
- php - Laravel TDD 在尝试通过请求在控制器中捕获它们时忽略了 URL 查询参数
- c# - 不应用 AutoMapper 投影