仅在 Epplus Values 中复制工作表
Copy worksheet in Epplus Values only
我正在使用 Epplus 从一个 wokbook 复制作品sheet 并将其粘贴到另一个 workbook.I 可以通过使用以下代码成功复制作品sheet。
ExcelPackage masterPackage = new ExcelPackage(new FileInfo(@"C:\Users\350154\Desktop\vb workouts\testsample.xlsx"));
ExcelPackage pckg = new ExcelPackage(new FileInfo("C:\Users\350154\Desktop\vb workouts\as.xlsx"));
string workSheetName = pckg.Workbook.Worksheets[1].Name;
ExcelWorksheet pck = pckg.Workbook.Worksheets[1];
pck.ConditionalFormatting.RemoveAll();
masterPackage.Workbook.Worksheets.Add(workSheetName, pck);
代码复制了 sheet sucessfully.But 复制的 sheet 在它们的 cells.So 中有公式 值没有复制到新的 excel 请帮助我解决这个问题。
如果您只是想将一个跨页sheet中的值复制到另一个新的sheet中,试试这个:
public static void CopySheetValues(string sourcePath, string sheetName, string destPath)
{
using (var src = new ExcelPackage(new FileInfo(sourcePath)))
using (var dest = new ExcelPackage(new FileInfo(destPath)))
{
var wsSrc = src.Workbook.Worksheets[sheetName];
var wsDest = dest.Workbook.Worksheets[wsSrc.Name] ?? dest.Workbook.Worksheets.Add(wsSrc.Name);
for (var r = 1; r <= wsSrc.Dimension.Rows; r++)
{
for (var c = 1; c <= wsSrc.Dimension.Columns; c++)
{
var cellSrc = wsSrc.Cells[r, c];
var cellDest = wsDest.Cells[r, c];
// Copy value
cellDest.Value = cellSrc.Value;
// Copy cell properties
cellDest.Style.Numberformat = cellSrc.Style.Numberformat;
cellDest.Style.Font.Bold = cellSrc.Style.Font.Bold;
// TODO... Add any additional properties that you may want to copy over
}
}
dest.Save();
}
}
更新:示例代码已更新以显示如何将格式从源复制到目标工作sheet
谢谢@Pete。但是我在寻找不同的问题时找到了一种将整个工作表复制到另一个工作簿的方法。 https://github.com/JanKallman/EPPlus/issues/94
您更改以下行以将工作表添加到工作簿。
var wsDest = m_GeneratedHeader.Workbook.Worksheets[wsSrc.Name] ?? m_GeneratedHeader.Workbook.Worksheets.Add(wsSrc.Name, wsSrc);
无需使用两个 'for' 循环遍历行和列来复制每个 属性。添加工作表将复制单元格样式、字体样式、合并单元格等...对我有用。
注意这是在EPPlus 4.5.0.1之后引入的
我正在使用 Epplus 从一个 wokbook 复制作品sheet 并将其粘贴到另一个 workbook.I 可以通过使用以下代码成功复制作品sheet。
ExcelPackage masterPackage = new ExcelPackage(new FileInfo(@"C:\Users\350154\Desktop\vb workouts\testsample.xlsx"));
ExcelPackage pckg = new ExcelPackage(new FileInfo("C:\Users\350154\Desktop\vb workouts\as.xlsx"));
string workSheetName = pckg.Workbook.Worksheets[1].Name;
ExcelWorksheet pck = pckg.Workbook.Worksheets[1];
pck.ConditionalFormatting.RemoveAll();
masterPackage.Workbook.Worksheets.Add(workSheetName, pck);
代码复制了 sheet sucessfully.But 复制的 sheet 在它们的 cells.So 中有公式 值没有复制到新的 excel 请帮助我解决这个问题。
如果您只是想将一个跨页sheet中的值复制到另一个新的sheet中,试试这个:
public static void CopySheetValues(string sourcePath, string sheetName, string destPath)
{
using (var src = new ExcelPackage(new FileInfo(sourcePath)))
using (var dest = new ExcelPackage(new FileInfo(destPath)))
{
var wsSrc = src.Workbook.Worksheets[sheetName];
var wsDest = dest.Workbook.Worksheets[wsSrc.Name] ?? dest.Workbook.Worksheets.Add(wsSrc.Name);
for (var r = 1; r <= wsSrc.Dimension.Rows; r++)
{
for (var c = 1; c <= wsSrc.Dimension.Columns; c++)
{
var cellSrc = wsSrc.Cells[r, c];
var cellDest = wsDest.Cells[r, c];
// Copy value
cellDest.Value = cellSrc.Value;
// Copy cell properties
cellDest.Style.Numberformat = cellSrc.Style.Numberformat;
cellDest.Style.Font.Bold = cellSrc.Style.Font.Bold;
// TODO... Add any additional properties that you may want to copy over
}
}
dest.Save();
}
}
更新:示例代码已更新以显示如何将格式从源复制到目标工作sheet
谢谢@Pete。但是我在寻找不同的问题时找到了一种将整个工作表复制到另一个工作簿的方法。 https://github.com/JanKallman/EPPlus/issues/94
您更改以下行以将工作表添加到工作簿。
var wsDest = m_GeneratedHeader.Workbook.Worksheets[wsSrc.Name] ?? m_GeneratedHeader.Workbook.Worksheets.Add(wsSrc.Name, wsSrc);
无需使用两个 'for' 循环遍历行和列来复制每个 属性。添加工作表将复制单元格样式、字体样式、合并单元格等...对我有用。
注意这是在EPPlus 4.5.0.1之后引入的