2017-03-03 28 views
2

私はこれを実行していましたが、停止しています。理由を理解できません。 EPPlus.Core v1.3を使用して、簡単なExcelファイルをインポートしています。ここで私が使用しているコードだ:Asp.netコアのインポートExcelファイルFileNotFoundException

public async Task<IActionResult> Import(IFormFile file) 
    { 
     //Get file 
     var newfile = new FileInfo(file.FileName); 
     var fileExtension = newfile.Extension; 

     //Check if file is an Excel File 
     if (fileExtension.Contains(".xls")) 
     { 
      //Create an excel package 
      using (var package = new ExcelPackage(newfile)) 
      { 
       //Get the first worksheet in the file 
       var worksheet = package.Workbook.Worksheets[1]; 
... 

のvarワークシートの行は、エラー

「IndexOutOfRangeException。:範囲外のワークシートの位置を」スロー

しかし、私はパッケージ変数を見たとき、私はこのエラーが表示

「長さ= 『package.File.Lengthは』 『System.IO.FileNotFoundException』をタイプ の例外を投げました」

私はここで何が欠けていますか?私が言ったように、これはうまくいきましたが、この問題を引き起こすためにこのコードに関連して私が変更したものは考えられません。

+0

アップロードされたファイルを取り込み、ファイルインフォオブジェクトを介してファイル名を取得し、次にFileInfoインスタンスをExcelPackageに渡しているようです。ファイルをロードする前に、ファイルをどこかのフォルダに保存してください。 –

+0

私はサーバーに保存しないようにしています。ファイルはかなり小さいので、私はそのファイルをメモリにロードして処理するだけでした。 – Wyatt

+2

それでは、FileInfoの代わりに 'ExcelPackage'にストリームを渡す必要があります。いくつかのバージョンで 'IFormFile'を見たことはありませんが、新しいExcelPackage(file.OpenReadStream())'が実行されるかもしれませんので、名前が異なるかもしれません。しかし、あなたはその考えを得る。 –

答えて

0

同じファイルですか?ファイルに2つのワークシートがなく、インデックスが1であるため、2番目のワークシートを探しているようです。

+0

同じファイルで、package.Workbook.Worksheets.First()とWorksheets [0]も試してみました。どちらもうまくいきません。 – Wyatt

0

ファイルをMemoryStreamにロードし、そこからExcelPackageを作成する必要があります。

using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes)) 
using (ExcelPackage excelPackage = new ExcelPackage(ms)) 
{ 
    //work with the excel document 
} 

FileUpload1.FileBytes asp.netのWebフォームのためであれば、私は推測しているコアは、類似した何かをしています。

関連する問題