当前位置: 首页 > 知识库问答 >
问题:

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

章飞虎
2023-03-14

我已经从网上搜索了很多,但不幸的是,没有一个奏效。如何将工作表从一个工作簿复制到另一个工作簿,使用C#在Excel中剪切和粘贴单元格值,错误:range类的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]];

知道为什么会这样吗?

共有1个答案

李和昶
2023-03-14

如果复制区域中有任何合并的单元格--即使它们没有跨越该区域的坐标单元格--并且您正在创建Excel应用程序类的新实例,我认为此错误是意料之中的。

与其newingExcel实例,不如修改为使用相同的Excel实例(未经测试):

var newWorkbook = oldSheet.Application.Workbooks.Add(System.Reflection.Missing.Value);
var newSheet = (Excel.Worksheet)newWorkbook.Worksheets.Add();
newSheet.Name = "sheetName";
 类似资料:
  • 试图从当前工作簿“Create Report.xlsm”中复制工作表名称“Headings Explantions”,该工作簿打开到我要求打开的工作簿中,我得到了下标超出范围的错误

  • 我正试图将所有工作表(7张)从workbook1(wb1)复制到WB2。wb1包含命令按钮,但我不希望它们出现在我的新工作簿中。我正在使用循环将单个工作表从一个工作簿复制到另一个工作簿。但是复制到第二张时出错了。我使用的代码如下:- 循环第一次成功运行,但对于i=2,代码给出错误

  • 问题内容: 我有一个带有源文件路径的字符串和另一个带有destfile路径的字符串,它们都指向Excel工作簿。 我想获取源文件的第一张纸并将其作为新选项卡复制到destfile(与destfile中的位置无关),然后保存它。 在or或or中找不到简单的方法。我想念什么吗? 问题答案: 解决方案1 使用该软件包的仅Python解决方案。仅数据值将被复制。 解决方案2 使用该程序包将复制操作委派给E

  • 对所有人,谢谢你提前的时间。 我们已经有了工作代码,可以在Excel中用vb将数据从一个wrksht移动到另一个wrksht。 如有任何帮助,我们将不胜感激。 2/22/19 以下是我的回应。 在第二个工作簿上,在第一列上进行搜索时,工作表称为orderlog 谢谢

  • 我有一本有工作表的工作簿。为了简单起见,假设我的工作簿有一个工作表。在我的工作表中,它被称为“SHEET1”,在单元格A1到A4中有数据。 我希望我的VBA代码做的是: 将工作簿“A”的第1行(或特别是单元格A1至A4)复制到范围变量“我的范围”中 创建一个新的工作簿,我们将此工作簿称为'B' 为工作簿'B'的默认“sheet1”指定一个新名称为“测试名称” 打开工作簿'B'(尽管我意识到VBA代

  • 我需要一个宏,它可以根据我选择的单元格从我所在的工作簿中复制整行。我已经可以这样做了,使用以下方法: 但是,我需要它将其(格式化和全部)粘贴到关闭的工作簿的第一个空行(基于B列)。R: \dasboards\wo。xlsm公司