0

私はc#を介してExcelファイルにコンテンツを書き込んでいます。私はExcelで4列と多くの行を持っています。アプリケーションを実行するときに、データがsheet1に存在するかどうかを確認する必要があります。その後、データをsheet2に移動する必要があります。sheet2にもデータが含まれている場合は、sheet2データを追加する必要があります。私はExcelにアクセスするために相互運用DLLを使用しています。コンテンツの作成は完了しましたが、プログラムで移動するにはどうすればよいですか?これが私が試したものです。

  Excel.Workbook xlwb;
  Excel.Application excelApp = new Excel.Application();
  Excel.Worksheet xlssheet1;
  Excel.Worksheet xlssheet2; 
 xlwb = excelApp.Workbooks.Open(myPath, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing,
                                    objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing);
            int rowIndex = 2; int colIndex = 1;
            if (excelApp.Cells[rowIndex, colIndex] != null)
            {
                xlssheet1 = (Worksheet)xlwb.Worksheets[1];
                xlssheet2 = (Worksheet)xlwb.Worksheets[2];

                xlwb.Sheets.Move(System.Reflection.Missing.Value, xlssheet2);
                xlwb.Save();                

            }
4

2 に答える 2

2

まず、ワークシートの最後に使用された行を見つける関数を定義します。

private int LastUsedRow(Excel.Worksheet aSheet)
{
    object hmissing = System.Reflection.Missing.Value;
    string usedAddress = aSheet.UsedRange.get_Address(hmissing, hmissing, Excel.XlReferenceStyle.xlA1, hmissing, hmissing);
    return int.Parse(usedAddress.Substring(usedAddress.LastIndexOf('$') + 1));
}

次に、コードは次のようにセルを1つのワークシートから別のワークシートに繰り返しコピーできます。

Excel.Workbook xlwb;
Excel.Application excelApp = new Excel.Application();
Excel.Worksheet xlssheet1;
Excel.Worksheet xlssheet2; 
xlwb = excelApp.Workbooks.Open(myPath, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing, objMissing);
xlssheet1 = (Worksheet)xlwb.Worksheets[1];
xlssheet2 = (Worksheet)xlwb.Worksheets[2];
int lastRow1 = LastUsedRow(xlssheet1);
int lastRow2 = LastUsedRow(xlssheet2);
int curRow = lastRow2 + 1;
for (int i = 1; i <= lastRow1; i++)
{
    object toCopy = xlsheet1.getRange("A"+i, "D" + i).get_Value(null);
    xlsheet2.getRange("A"+curRow, "D" + curRow).set_Value(null, toCopy);
    curRow++;
}
xlwb.Save();                
于 2012-10-30T16:10:36.873 に答える
0

データを「移動」する方法が見つからない場合は、手動で移動してください。

  1. 値をコピーします
  2. コピーが機能したことを確認します
  3. 元のセルを空白にします
  4. 保存する
于 2012-10-30T15:02:43.147 に答える