【发布时间】:2016-07-01 20:06:20
【问题描述】:
我有一个填充了不同 DataTables SQL-Results 的 DataSet。一些数据表与 Excel 模板文件相连。所以最终想要有一个混合了新工作表和从某个模板复制的工作表的 excelfile。
这就是为什么我的代码看起来像这样:
public void CopyResultToExcelFileWithTemplate(DataSet sourceResult, string exportFilePath, string sourceName, string templateExcelFilePath, string sheetName = null)
{
var excelFile = new FileInfo(exportFilePath);
var templateFile = new FileInfo(templateExcelFilePath);
if (string.IsNullOrEmpty(sheetName))
{
sheetName = sourceName;
}
// Open and get worksheets from template
using (var template = new ExcelPackage(templateFile))
{
var excelWorksheets = template.Workbook.Worksheets;
var sheetCount = 1;
foreach (DataTable resultTable in sourceResult.Tables)
{
var proposedSheetName = sourceResult.Tables.Count == 1 ? sheetName : string.Format("{0}_{1}", sheetName, sheetCount);
var currentWorksheet = excelWorksheets.FirstOrDefault(w => string.Equals(w.Name, proposedSheetName, StringComparison.CurrentCultureIgnoreCase)) ?? excelWorksheets.Add(proposedSheetName);
FillWorksheetWithDataTableContent(currentWorksheet, resultTable);
using (var excelToExport = new ExcelPackage(excelFile))
{
excelToExport.Workbook.Worksheets.Add(currentWorksheet.Name, currentWorksheet);
excelToExport.Save();
}
sheetCount++;
}
}
}
public void CopyResultToExcelFile(DataSet resultSet, string exportFilePath, string sourceName, string sheetName = null)
{
if (string.IsNullOrEmpty(sheetName))
{
sheetName = sourceName;
}
var excelToExport = new FileInfo(exportFilePath);
using (var excelPackage = new ExcelPackage(excelToExport))
{
var sheetCount = 1;
foreach (DataTable resultTable in resultSet.Tables)
{
var proposedSheetName = resultSet.Tables.Count == 1 ? sheetName : string.Format("{0}_{1}", sourceName, sheetCount);
var worksheet = excelPackage.Workbook.Worksheets.Add(proposedSheetName);
FillWorksheetWithDataTableContent(worksheet, resultTable);
sheetCount++;
}
excelPackage.Save();
}
}
所以我用模板中的工作表副本和新工作表的组合填充临时创建的 excel 文件。它工作正常,它在自己的工作表中显示 excelfile 中所有 DataTables 的内容,但是当 excelfile 包含复制的工作表时,会出现两条错误消息,并且复制的工作表没有格式化。
【问题讨论】:
-
您找到解决方案了吗?我一直在尝试使用它来将工作表从一个文件复制到另一个文件,它会正确复制数据和公式,但它不像第一个文件那样格式化为表格,并且在打开时会出错。
-
使用 EPPlus 4.1 时,使用
Worksheets.Add方法将工作表从一个文件复制到另一个文件时会发生异常。我的解决方法是使用ExcelPackage.SaveAs方法制作模板文件的副本。然后我根据需要自定义新的模板文件。
标签: c# excel vba epplus worksheet