4

私はExcelファイルをある形式から別の形式に変換するユーティリティに取り組んでいます。次の要件を満たすために、jxlライブラリを使用することをお勧めしました。
ファイルをシートごとに読み、次の手順を実行します

シート名を取得し、それをマップのキーにしてから、その列ヘッダーを取得して値にします。

次のようになります

   Map<String, List<String>> result = result<key=sheetName, value=list of column headers> 

指定されたファイル内のすべてのシートに対してこれを実行します

私はこれを次のように行いました

public Map> function(String filePath)はIOException、BiffException{をスローします

       Map<String, List<String>> map = new HashMap<String, List<String>>(); 
    Workbook workBook=Workbook.getWorkbook(new File (filePath));
      String [] sheetNames = workBook.getSheetNames();
      Sheet sheet=null;
      List<String > fields = new ArrayList<String>();
      for (int sheetNumber =0; sheetNumber < sheetNames.length; sheetNumber++){
         sheet=workBook.getSheet(sheetNames[sheetNumber]);
         for (int columns=0;columns < sheet.getColumns();columns++){
             fields.add(sheet.getCell(columns, 0).getContents());


         }
         map.put(sheetNames[sheetNumber],fields);

      }
      return map;
}

私は望ましい結果を得ることを期待してこれを行いましたが、それはすべてのシートの列ヘッダーを各キーに対して値として格納することです。つまり、ファイルに次の名前のシートが2つある場合

  1. sheet1
  2. sheet2

以下はそれらの列ヘッダーです

Sheet1- > id、名前
sheet2->カテゴリ、価格

すると地図は次のようになります

result<sheet1,<id, name, caegory, price>>
result<sheet2,<id, name, caegory, price>>

私が間違っていることを理解できませんか?私のプロジェクトにはバックエンドの計算がたくさんあり、このことに多くの時間を費やしたくないので、助けてください。

どんな助けでも大歓迎です

4

2 に答える 2

5

ここに投稿して問題を解決しましたが、ここで解決策を提供するのを忘れました。
上記のコードの問題は、リスト宣言の場所です。ループを繰り返すたびに更新(空)され、一度に1枚のシートのデータのみが格納されるように、
内で宣言する必要があります。 正しいコードは以下のとおりです。for

      Map<String, List<String>> map = new HashMap<String, List<String>>(); 
      Workbook workBook=Workbook.getWorkbook(new File (filePath));
      String [] sheetNames = workBook.getSheetNames();
      Sheet sheet=null;
      for (int sheetNumber =0; sheetNumber < sheetNames.length; sheetNumber++){
         List<String > fields = new ArrayList<String>();
         sheet=workBook.getSheet(sheetNames[sheetNumber]);
         for (int columns=0;columns < sheet.getColumns();columns++){
             fields.add(sheet.getCell(columns, 0).getContents());                 
         }
         map.put(sheetNames[sheetNumber],fields); 
      }
      return map;
}

それが誰かを助けることを願っています

于 2012-10-15T11:25:03.357 に答える
2
public String ExcelValueGetFn(String FilePath, int column, int row) throws BiffException, IOException  {
    Workbook workbook = null;
    final String EXCEL_FILE_LOCATION = FilePath;
    workbook = Workbook.getWorkbook(new File(EXCEL_FILE_LOCATION));

    Sheet sheet = workbook.getSheet(0);
    Cell cell1 = sheet.getCell(column, row);
    System.out.print(cell1.getContents() + ":");

    String textToSendFromExcel = cell1.getContents();
    return textToSendFromExcel;
}
于 2018-12-08T05:19:59.543 に答える