1

Excelファイルを開こうとしていますopen file dialogが、次のエラーが表示されます

ここに画像の説明を入力

これは私が書いたコードです。どこが間違っているのか教えてください

Excel.Application excelApp = new Excel.Application();
Excel.Workbook newWorkbook = excelApp.Workbooks.Add();  
Excel.Workbook excelWorkbook = null;
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "Excel Files |*.xlsx";
ofd.InitialDirectory = @"C:\";
if (ofd.ShowDialog() == DialogResult.OK)
{
    string path = System.IO.Path.GetFullPath(ofd.FileName);
    try
    {
        excelWorkbook = excelApp.Workbooks.Open(path,
        0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);
    }
    catch (Exception theException)
    {
        String errorMessage;
        errorMessage = "Error: ";
        errorMessage = String.Concat(errorMessage, theException.Message);
        errorMessage = String.Concat(errorMessage, " Line: ");
        errorMessage = String.Concat(errorMessage, theException.Source);
        MessageBox.Show(errorMessage, "Error");
    }
}

私はExcelシートから値を取得する必要があるため、これを行っています。詳細が必要な場合はお知らせください。

編集 -: よく見ると、ファイルを開く最初の試行ではメッセージ ボックスが表示されないことがわかりましたが、ファイルは開かれず、後続の試行ごとにメッセージ ボックスが表示されます。@Pankaj の提案に従って、Finally を一番下に追加しようとしましたが、ファイルを開く 2 回目の試行の後でもメッセージ ボックスが表示されます。

4

3 に答える 3

1

さて、コードに欠けていた行は -:excelApp.Visible = true;

コードは次のようになります。

excelWorkbook = excelApp.Workbooks.Open(path,
            0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
            true, false, 0, true, false, false);
// do the operations on file
.
.
// open the file here 
excelApp.Visible = true;

@Pankaj の提案に従って、私は応募しました

finally
{
    excelWorkbook.Close();
    excelApp.Application.Quit();
    Marshal.ReleaseComObject(excelApp);
}

しかし、これの問題は、ワークブックとExcelアプリケーションを閉じるとファイルがすぐに閉じてしまい、操作を実行してユーザーがExcelファイルを表示するため、ファイルを閉じたくないということです。また、アプリケーションとワークブックを閉じると、ユーザーがファイルを選択せず​​にファイル ダイアログを閉じると、未処理のNullReferenceExceptionがスローされます。だから私はブロックを改善し、今は次のようになります

finally
{
    Marshal.ReleaseComObject(excelApp);
}

ただし、選択したファイルと一緒に新しいファイルが開かれます。現時点では問題ありませんが、新しく開いたファイルを閉じる作業を行っています。@pankaj と @Csaba への回答ありがとうございます。:)

于 2013-09-04T04:57:49.177 に答える
0

の 3 番目のパラメーターとして true を指定してみてくださいWorkbooks.Open。MSDN: http://msdn.microsoft.com/en-us/library/office/microsoft.office.interop.excel.workbooks.open.aspx

ReadOnly
    Type: System.Object
    Optional Object. True to open the workbook in read-only mode.

値を取得したいだけなので、読み取り専用で開くだけで十分です。

于 2013-09-03T17:10:05.063 に答える