2016-12-09 37 views
-2

このコードをデバッグしようとしましたが、管理しませんでした。私のスクリプトが破損したXLSファイルを作成する理由を知っていますか?NPOIを使用して破損したXLSファイルを取得する

string strCaleSalvareTest = @"C:\Users\andrei.tudor\Documents\TipMacheta.xls"; 
HSSFWorkbook wbXLS; 
strEr = "Er"; 
try 
{ 
    fsXLSCitire = new FileStream(strCaleSalvareTest, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); 
    wbXLS = new HSSFWorkbook(fsXLSCitire); 

    strEr = string.Empty; 
} 
catch (Exception ex) 
{ 
    strEr = ex.Message; 
} 

これを実行しようとすると、wbXLSの作成からcatch例外ブロックにジャンプします。

+0

例外とは何ですか?あなたは常にあなたの質問にそのような関連情報を含める必要があります。 – mason

+0

これは本当になぜ私のコードがうまくいかないのか、https://npoi.codeplex.com/documentationのドキュメンテーションを見て、トピックから離れていない質問をするあなたの質問は閉鎖されると投票されました –

+0

例外はありませんが、Excelが作成されていますが、それは訂正されて空でもあります – Spoukey

答えて

0

あなたは(FileAccess.Write)を作成するための新しいFileStreamを作成しているので、例外を取得し、ことができるように期待しているHSSFWorkbookのコンストラクタにそれを渡しているが、ストリームからをお読みください。 FileStreamがファイルを作成しているためにファイルが壊れていますが、何も書き込まれていません。

新しい空白のブックを作成してファイルに保存しようとしているのであれば、次のようにすることができます。新しいブックに少なくとも1つのワークシートを追加する必要がある、または破損したファイルが生成されることに注意してください。

// Create a new workbook with an empty sheet 
HSSFWorkbook wbXLS = new HSSFWorkbook(); 
ISheet sheet = wbXLS.CreateSheet("Sheet1"); 

// Write the workbook to a file 
string fileName = @"C:\Users\andrei.tudor\Documents\TipMacheta.xls"; 
using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) 
{ 
    wbXLS.Write(stream); 
} 

あなたはそれが存在しない場合は、既存のブックを読んだり、新しいものを作成しようとしている場合、あなたはこのような何かを実行する必要があります。

string fileName = @"C:\Users\andrei.tudor\Documents\TipMacheta.xls"; 
HSSFWorkbook wbXLS; 

try 
{ 
    // Try to open and read existing workbook 
    using (FileStream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) 
    { 
     wbXLS = new HSSFWorkbook(stream); 
    } 
} 
catch (FileNotFoundException) 
{ 
    // Create a new workbook with an empty sheet 
    wbXLS = new HSSFWorkbook(); 
    wbXLS.CreateSheet("Sheet1"); 
} 

ISheet sheet = wbXLS.GetSheetAt(0); // Get first sheet 

// ... 

// Write workbook to file 
using (FileStream stream = new FileStream(fileName, FileMode.Create, FileAccess.Write)) 
{ 
    wbXLS.Write(stream); 
} 
関連する問題