C#excel interop剪切和粘贴异常

问题描述 投票:1回答:2

我正在研究一个项目,我遇到了一个我不知道如何解决的异常。我到处搜索,找不到有帮助的解决方案。

我正在尝试在电子表格中剪切范围,该电子表格在A列的单元格中找到特定值,并将该特定值的整行粘贴到从A2开始的新电子表格中,直到原始值中找不到该值电子表格。

我的代码当前在新电子表格中粘贴了一行,然后给出了这个异常“信息无法粘贴,因为剪切区域和粘贴区域的大小和形状不同。”此时代码中发生异常;

Excel.Range from = currentFind.EntireRow;
Excel.Range to = oSheet.get_Range("A2:A2500");

我想我需要使用活动单元格和活动表格属性。

请帮我!

public void btnLoad_Click(object sender, EventArgs e)
{
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
if (dmCheck.IsChecked == true && fldCheck.IsChecked == true)
{
oXL = new Excel.Application();
oXL.Visible = true;
oWB = (Excel._Workbook)(oXL.Workbooks.Add());
oSheet = (Excel._Worksheet)oWB.ActiveSheet;
string dXLPath = @"N:/DAILY2.xlsx";
Excel.Workbook dWB = oXL.Workbooks.Open(dXLPath);
Excel.Worksheet dSheet = dWB.Worksheets.get_Item(1);
Excel.Range dRng = dSheet.get_Range("B1");
dRng.EntireColumn.Hidden = true;
Excel.Range currentFind = null;
Excel.Range firstFind = null;
Excel.Range taskHazpoi = dSheet.get_Range("A2", "A2500");
currentFind = taskHazpoi.Find("HAZPOI", Type.Missing, Excel.XlFindLookIn.xlValues, Excel.XlLookAt.xlPart, Excel.XlSearchOrder.xlByRows, Excel.XlSearchDirection.xlNext, false, Type.Missing, Type.Missing);
while(currentFind != null)
{
if (firstFind == null)
{
firstFind = currentFind;
}
else if (currentFind.get_Address(Excel.XlReferenceStyle.xlA1) == firstFind.get_Address(Excel.XlReferenceStyle.xlA1))
{
break;
}
Excel.Range from = currentFind.EntireRow;
Excel.Range to = oSheet.get_Range("A2:A2500");
from.Cut(to);
currentFind = taskHazpoi.FindNext(currentFind);
}
else if (dmCheck.IsChecked == false && fldCheck.IsChecked == false)
{
MessageBox.Show("Please check the DM and Flood box", "Report Loader");
}
c# excel interop
2个回答
0
投票

我建议您使用Epplus而不是互操作Excel(我使用它)。好处:

  • 不需要在系统中安装Office软件包。
  • 内存中没有Excel实例。
  • 方法更明确。

使用示例:

http://zeeshanumardotnet.blogspot.com.es/2011/06/creating-reports-in-excel-2007-using.html?m=1

你在Nuget找到了它。

问候,


0
投票

您尝试将整行复制到单元格区域A2:A2500,这就是触发异常的原因。

对于'到'范围,请使用oSheet.get_Range("A2").EntireRowoSheet.get_Range("A:A")

© www.soinside.com 2019 - 2024. All rights reserved.