web-dev-qa-db-ja.com

ワークシートの位置が範囲外です。接続が閉じられました。 EPPLUSを使用する場合

EPPLUS 4.0.3を使用して、XLSXファイルをテンプレートとして開こうとしています(空のXLSXファイルも使用しました)。

テンプレートファイル(空白または実際のファイル)を開かずに、新しいブックを作成してシートを作成するだけで、問題なく動作します。 ORテンプレートファイルを開いて新しいワークシートを作成すると、正常に機能します。これは、[〜#〜] first [〜# 〜]エラーが発生したテンプレートのシート:ワークシートの位置が範囲外です。

次のように最初のワークシートにアクセスします:workBook.Worksheets.First()は機能しません。

最初はもはや定義ではありません。

そこで、名前とこの方法で最初のワークシートにアクセスしてみましたworkBook.Worksheets[1] 0と1の両方を使用して、最初のシートを取得しようとします。

私のコード:

    var existingTemplate = new FileInfo(_ExcelTemplateFilePath);
    using (ExcelPackage p = new ExcelPackage(existingTemplate)) {
    // Get the work book in the file
    ExcelWorkbook workBook = p.Workbook;
    ExcelWorksheet ws = workBook.Worksheets[1];
    // MY OTHER Excel CELL CODE HERE    
}}

Excelファイルの最初のシートにアクセスする方法を知っている人はいますか?

11
user-44651

ワークシートをインデックスではなく名前で参照することで、この問題を回避することができました。

var oSheet = package.Workbook.Worksheets["My Worksheet Name"];
11
Thomas Johnson

最初のシートを取得するには、以下のコードを使用してください

    var xlWorkbook = new ExcelPackage(new FileInfo(@"C:\ESD\EXCELDATAREADTEST.xlsx"));

ExcelWorksheet workSheet = xlWorkbook.Workbook.Worksheets[1];

ブックの正しい場所を指していることを確認してください

5
Mpilo Z

私はこれと同じ問題を抱えていましたが、問題は、EPPlusが名前付き範囲のスプレッドシートでチョークすることです。

スプレッドシートを読めるようにするために(LibreOffice Calcを使用して)行ったことは次のとおりです。

  1. スプレッドシートのコピーを作成する
  2. LibreOfficeで開く
  3. リストアイテム
  4. 範囲を定義するには、左上隅のdrodpwonをクリックします。通常は「A1」と表示されます
  5. 「名前の管理」を選択します
  6. リスト全体を強調表示する
  7. 「削除」をクリックします

これらの手順を完了したら、スプレッドシートを保存/閉じて、EPPlusで開くことができました。

0
John Hurrell

使った

var currentSheet = package.Workbook.Worksheets;
var workSheet = currentSheet.First();

これは、シートに既知の名前がない可能性があり、最初のシートに関心があるためです。

0
israel