2

ボタンのクリックイベントでデータを保存しています。以下はコードです。

using Excel = Microsoft.Office.Interop.Excel;

Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range range;

object misValue = System.Reflection.Missing.Value;
String st = System.IO.Directory.GetCurrentDirectory() + "\\A.xlsx";

xlApp = new Excel.ApplicationClass();

xlWorkBook = xlApp.Workbooks.Open(st, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

int i = 6;
for (i = 6; i < 10; i++)
{
    xlWorkBook.SaveAs(st, XlFileFormat.xlExcel9795, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue);
MessageBox.Show(xlWorkSheet.get_Range("L" + @i, "L" + @i).Value2.ToString());
}

xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();

保存すると、エラーが発生します:

HRESULT: Excel ファイルの保存中に 0x800A03EC エラーが発生しました

4

5 に答える 5

2

HRESULT からの Excel ファイル例外の保存で理解しているように:メソッド SaveAs の引数が間違っている場合に発生する0x800A03EC例外。あなたの主張を次の場所で見直してください:

xlWorkBook.SaveAs(st1, XlFileFormat.xlExcel9795, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlShared, misValue, misValue, misValue, misValue, misValue);
于 2013-03-24T10:56:29.577 に答える
2

[1,1] sheet.cells[0,0] から始まる sheet のセル インデックスを確認すると、com エラーがスローされます。

于 2013-11-30T15:52:43.867 に答える
1

@Sebastian は、SaveAs を 4 回呼び出して、閉じずに同じ場所に保存するという点で正しいです。これは機能しません。まず、これをループの外に移動する必要があります。しかし、コードを詳しく見てみると、ワークブックでは何も変更していないため、保存する必要はありません。何かを変更した場合は、SaveAs ではなくSaveを呼び出したほうがよいでしょう。これに加えて、ワークブックを開くときにReadOnlyを true に指定しているため、任意の容量で保存を呼び出そうとしても機能しません。

最後に、>= C# 4 を使用している場合は、オプションのパラメーターを使用できるため、これらのmisValueはすべて不要です。以下のコードを整理しました:

using Excel = Microsoft.Office.Interop.Excel;

var st = System.IO.Directory.GetCurrentDirectory() + "\\A.xlsx";

var xlApp = new Excel.Application();
var xlWorkBook = xlApp.Workbooks.Open(st);
var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Item[1];

for (var i = 6; i < 10; i++)
{
    MessageBox.Show(xlWorkSheet.Range["L" + @i, "L" + @i].Value2.ToString());
}

//make some changes here

xlWorkBook.Save();
xlWorkBook.Close();
xlApp.Quit();
于 2013-03-24T11:42:27.073 に答える