4

Excel ファイルを開いて (または新しい xls を作成して)、いくつかの値を書き込もうとしています。以下のプログラムは、新しい xls ファイルを作成するだけで問題なく動作しますが、いくつかの問題が発生します。

**mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);**

エラーは次のとおりです。「LOG.xls」にアクセスできません。ファイルが破損しているか、応答していないサーバー上にあるか、読み取り専用である可能性があります。読み取り専用ではなく、破損していません (実行時にファイルが作成されることがあるため)。それでは何が問題なのですか?

private static Microsoft.Office.Interop.Excel.Workbook mWorkBook;
    private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets;
    private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1;
    private static Microsoft.Office.Interop.Excel.Application oXL;

    private void btnSignIn_Click ( object sender, EventArgs e )
    {

        string path = "D:\\LOG.xls";
        if(!File.Exists(path))
        {
            File.Create (path);
        }


        oXL = new Microsoft.Office.Interop.Excel.Application ();
        oXL.Visible = true;
        oXL.DisplayAlerts = false;
        //error on this line
        mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);

        //Get all the sheets in the workbook
        mWorkSheets = mWorkBook.Worksheets;

        //Get the allready exists sheet
        mWSheet1 = (Microsoft.Office.Interop.Excel.Worksheet)mWorkSheets.get_Item ("Sheet1");

        Microsoft.Office.Interop.Excel.Range range = mWSheet1.UsedRange;

        int colCount = range.Columns.Count;
        int rowCount = range.Rows.Count;

        for ( int index = 1; index < 15; index++ )
        {
            mWSheet1.Cells [rowCount + index, 1] = rowCount + index;
            mWSheet1.Cells [rowCount + index, 2] = "New Item" + index;
        }

        mWorkBook.SaveAs (path, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal,
        Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive,
        Missing.Value, Missing.Value, Missing.Value,
        Missing.Value, Missing.Value);

        mWorkBook.Close (Missing.Value, Missing.Value, Missing.Value);
        mWSheet1 = null;

        mWorkBook = null;

        oXL.Quit ();
        GC.WaitForPendingFinalizers ();
        GC.Collect ();
        GC.WaitForPendingFinalizers ();
        GC.Collect ();
    }
4

2 に答える 2

8

の使用はFile.Createここでは適切ではありません。FileStreamExcel ファイルではなく(空白) を返します( .xls でパスを定義しても、Excel ファイルは作成されません... )。

そして、閉じて破棄しないので、開こうとすると、既に使用されているため例外が発生します (また、Excel ファイルを作成していないため、解放しても何らかの方法で例外が発生します)この段階で)。

そのため、ブックが存在する場合は、 を使用して開くことができますoXL.Workbooks.Openワークブックが存在しない場合は、次を使用して作成する必要があります: oXL.Workbooks.Add() を使用してから、メソッドを呼び出しmWorkBook.SaveAs(...)て実際に作成します。

oXL = new Microsoft.Office.Interop.Excel.Application();
oXL.Visible = true;
oXL.DisplayAlerts = false;

string path = "D:\\LOG.xls";
if (!File.Exists(path)) 
{
    mWorkBook = oXL.Workbooks.Add;
} 
else
{
    mWorkBook = oXL.Workbooks.Open(path, 0, false, 5, "", "", false,    Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true,
        false, 0, true, false, false);
}

(VB=>C# が正しいことを願っています!)

また、SaveAsメソッドで、特定のバージョンの Excel ファイルを作成する場合は、正しいものを設定する必要がFileFormatあります (パスに .xls を設定するだけでは不十分です...)

オプションのオブジェクト。ファイルを保存するときに使用するファイル形式。有効な選択肢のリストについては、FileFormat プロパティを参照してください。既存のファイルの場合、デフォルトの形式は最後に指定されたファイル形式です。新しいファイルの場合、デフォルトは、使用されている Excel のバージョンの形式です

お役に立てれば。

于 2013-06-04T22:41:58.307 に答える