私はプロジェクトに取り組んでいますが、修正方法がわからないという例外がありました。私はどこでも検索し、解決策を見つけることができません。C#はinteropの切り取りと貼り付けの例外を凌駕します
列Aのセルに特定の値を見つけたスプレッドシートの範囲を切り取り、その特定の値の行全体をA2から始まる新しいスプレッドシートに貼り付け、その値がもはやなくなるまで元のスプレッドシートに見つかりました。
私のコードは現在、新しいスプレッドシートに1つの行を貼り付けた後、「切り取り領域と貼り付け領域が同じサイズと形状ではないため、情報を貼り付けることができません」という例外が表示されます。コード;
アクティブセルとアクティブシートのプロパティを使用する必要があると思います。
私を助けてください!
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");
}
私はあなたのアドバイスを試みました。最初のオプションは私に同じ例外を与えますが、2番目の提案は1行だけを切り取って貼り付けます。私のコードを少し変更して、ソーススプレッドシートがすべての行をカットしているのを見ていますが、ターゲットのスプレッドシートが1行しかペーストされていません。私は行がお互いに貼り付けていると信じています。これは繰り返しの問題でしょうか? – PTP