ExcelのデータをJavaのHashmapに抽出しようとしています。下図のようにJavaのデータフォーマットである8.この目的のために、私は、Apache POIライブラリとバージョンを使用しています:文字列データをExcelの列からハッシュマップに抽出する際の問題
Excel_Data.xlsx:
Title | Label A | Label B | Label C
Signal 1 | value A1 | value B1 | value C1
Signal 2 | value A2 | value B2 | value C2
Signal 3 | value A3 | value B3 | value C3
ここに書かれたすべてのテキストはString
形式で、ファイルに存在するいかなる数値型が存在しません
は、私が欲しい:
は、私がkey
とvalue
ペアの形でハッシュマップデータを格納したいので、私の出力は次のようになります。
Expected Approach:
Key -> Value
Signal 1 -> [value A1, value B1, value C1 ...]
Signal 2 -> [value A2, value B2, value C2 ...]
Signal 3 -> [value A3, value B3, value C3 ...]
私は別の私が試したどのような信号
Expected_output.xlsx:
Signal 1 | value A1
| value B1
| value C1
Signal 2 | value A2
| value B2
| value C2
Signal 3 | value A3
| value B3
| value C3
のため、以下のファイルをExcelにこのデータを印刷するために実装するこのアプローチ:
私が試したこの解決策を見つけるオンラインが、その特異性のために、私は解決策を見いださなかった。私はまた、キーと値の両方がhashmapでExcelからString
というように抽出された解決策を見つけようとしましたが、あまり役に立ちませんでした。
私はコードの下に示すようにArrayList
にString
とValues
からKeys
を格納することを決定したアプローチを思い付いた:
// this function loads data from excel file stored in filestream variable
public void storeData(){
//this hashmap will be used to hold values of excel file in key:values format
HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
String key = null;
ArrayList<String> value = null;
try {
// get workbook instance of xlsx file
HSSFWorkbook workbook = new HSSFWorkbook(open_excel_data);
//Get first sheet from the workbook
HSSFSheet sheet = workbook.getSheetAt(0);
//Iterate through each rows from first sheet
Iterator<Row> rowIterator = sheet.iterator();
while(rowIterator.hasNext()) {
Row row = rowIterator.next();
// for each row, iterate through each columns
Iterator<Cell> cellIterator = row.cellIterator();
while(cellIterator.hasNext())
{
Cell cell = cellIterator.next();
key = cell.getStringCellValue();
value.add(cell.getStringCellValue()); // I cannot think of what should be here to store labels in correct format to arraylist
if(key != null && value != null)
{
map.put(key, value);
key = null;
value = null;
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
P.S.
そのシグナルのたくさんの巨大なファイルやラベル
- それは、この機能が
あなたもすることができ、既に構築されたソフトウェアツールの一部になるようにJavaを使用して行う必要があり
何かを念頭に置いてこのタスクを実行するための他の簡単なアプローチをお勧めします。
あなたは(最初は、ループ内の各時間)ヌルとして配列リストを設定し、nullに()を呼び出すを追加しようとしています。それはNPEを引き起こすでしょう。それはあなたが直面している問題ですか? –
また、最初の行をスキップしているわけではありません。作成したマップでは必要ではないようです。 –
また、セルの値ごとにキーを設定しています。 –