繁体   English   中英

c#-(Excel互操作)如何在VSTO中将一个工作表复制到另一工作簿?

[英]c# - (Excel interop)How can I copy one worksheet to another workbook in VSTO?

我从互联网上搜索了很多东西,但是不幸的是,它们都没有起作用。 如何将工作表中的工作表复制到另一个工作簿中如何 使用C#在Excel中剪切和粘贴单元格值错误:范围类的Pastespecial方法失败

问题是,如果我在同一工作簿中创建了工作表,则代码可以正常工作。 但是,如果我创建了一个新的工作簿,则粘贴将不起作用。

   //copy function: copy to a new worksheet in the same workbook
   var copyFromRange = oldSheet.Range[
                           (Excel.Range)oldSheet.Cells[1, 1],
                           oldSheet.Cells[firstPackageStartLine - 1, lastColIgnoreFormulas]];
   copyFromRange.Copy(Type.Missing);
   var copyHeaderRange = newSheet.Range[(Excel.Range)newSheet.Cells[1, 1], newSheet.Cells[firstPackageStartLine - 1, lastColIgnoreFormulas]];
   copyHeaderRange.PasteSpecial(Excel.XlPasteType.xlPasteAll, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);


   //Copy to a new workbook, won't work
   var excel = new Excel.Application();
   var newWorkbook = excel.Workbooks.Add(System.Reflection.Missing.Value);
   var newSheet = (Excel.Worksheet)newWorkbook.Worksheets.Add();
   newSheet.Name = "sheetName";

   //copy function, same as above. But this won't work, PasteSpecial would throw null reference error.
   //If I changed the copyHeaderRange to below, then it will throw: PasteSpecial method of Range class failed.
   var copyHeaderRange = (Excel.Range)newSheet.Cells[1, 1];

   //If the copyRange is defined as below, it will throw null reference error while pastespecial
   var copyHeaderRange = newSheet.Range[(Excel.Range)newSheet.Cells[1, 1], newSheet.Cells[firstPackageStartLine - 1, lastColIgnoreFormulas]];

我也尝试过打开一个新的工作簿而不是开始一个新的工作簿,将无法正常工作。 尝试在复制前激活工作表,但也无法正常工作。

知道为什么会这样吗?

如果复制范围中有任何合并的单元格-即使它们没有超出该范围的坐标单元格-并且您正在创建Excel Application类的新实例,则我认为会出现此错误。

您可以修改以使用相同的Excel实例(未经测试),而不是new excel实例:

var newWorkbook = oldSheet.Application.Workbooks.Add(System.Reflection.Missing.Value);
var newSheet = (Excel.Worksheet)newWorkbook.Worksheets.Add();
newSheet.Name = "sheetName";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM