1

我有一个Spire.Xls.Workbook我想克隆的对象。由于该类不提供Clone方法,我尝试创建一个新工作簿并从现有工作簿复制所有现有工作表。这是我的代码:

public void Clone(Workbook workbook, string fileName)
{
    var clone = new Workbook();

    // copy worksheets to List to be able to use foreach
    var worksheets = workbook.Worksheets
        .Cast<Worksheet>()
        .ToList();

    foreach (Worksheet worksheet in worksheets)
    {
        var clonedSheet = worksheet.Clone(worksheet.Parent);
        clone.Worksheets.Add((IWorksheet)clonedSheet);
    }

    clone.SaveToFile(fileName, ExcelVersion.Version2007);
}

该方法在没有错误的情况下完成,文件被创建但它不包含任何克隆的工作表。我做错了什么,还是无法创建Workbook对象的克隆?

4

2 回答 2

0

采用:

    clone.Worksheets.AddCopy(worksheets);
于 2018-10-22T02:28:42.913 回答
0

@DheerajMalik 的答案适用于.xlsx文件。如果您有.xlsm文件,那么宏将丢失。为了解决这个限制,这里有另一种方法:

using (var stream = new MemoryStream())
{
    // Save the original to a memory stream
    workbook.SaveToStream(stream);

    // Create a new workbook and load the content from the memory stream
    var clone = new Workbook();
    clone.LoadFromStream(stream);
}
于 2020-10-19T07:58:34.447 回答