Мне нужно подумать о стратегии чтения данных, хранящихся в листе Excel, отформатированном так, чтобы его можно было доставить в формате JSON, при условии, что они сохраняют оригинальные заголовки.
Но поскольку заголовки сложны,моя самая большая проблема;как с ними справиться, я не могу придумать хорошую стратегию, чтобы поместить их, как ожидается, в вывод.вот настоящий файл Excel, который мне нужно разложить: https://github.com/EEsparaquia/readFormattedExcel/blob/master/Book1.xlsx
-------------------------------------------------------------------
Order002 | | |
-------------------------------------------------------------------
02X Phones | | |
-------------------------------
| | Order condition |
-------------------------------------------------------------------
| | |
-------------------------------------------------------------------
order | Date | Group | Desc | Comm- | Order | Type | Sub Condition|
# | | | | ents | Type | |--------------|
| | | | | | | Blue | Red |
-------------------------------------------------------------------
1 |12119 | A | 5.9 | New | D40 | 2 | 90 | 2 |
| | | Inch | | | | | |
-------------------------------------------------------------------
2 |12119 | A | 5.9 | New | D40 | 2 | 87 | 3 |
| | | Inch | | | | | |
И мой вывод должен быть в формате JSON:
{
"Order002":{
"02X Phones":{
"Order #":"1",
"Date":"12119",
"Group":"A",
"Desc":"5.9 Inch",
"Comments":"New",
"Order Conditions":{
"Order Type":"D40",
"Type":"2",
"Sub Condition":{
"Blue":"90",
"Red":"2"
}
}
}
}
}
Пока я могучитать данные таблицы Excel построчно и столбец за столбцом, то есть сначала я читаю ячейку [1, A], [1, B], [1, C] ... [1, "n"] и после [2, A], [2, B], [2, C] ... [2, "n"].
Вот мой код:
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.*;
import javax.xml.bind.annotation.XmlType;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
public class App {
public static final String SAMPLE_XLSX_FILE_PATH = "Book1.xlsx";
public static void main(String []args){
try {
//Creating a workbook from Excel file
Workbook workbook = WorkbookFactory.create(new File(SAMPLE_XLSX_FILE_PATH));
//Getting the Sheet at index zero
Sheet sheet = workbook.getSheetAt(0);
DataFormatter dataFormatter= new DataFormatter();
System.out.println("\n\nIterating over Rows and Columns using Java 8 forEach with lambda\n");
sheet.forEach(row -> {
row.forEach(cell -> {
printCellValue(cell);
});
System.out.println("End of forEach - Lambda");
});
workbook.close();
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
e.printStackTrace();
}
}
private static void printCellValue(Cell cell){
switch (cell.getCellTypeEnum()){
case BOOLEAN:
System.out.println(cell.getBooleanCellValue());
break;
case STRING:
System.out.println(cell.getStringCellValue());
break;
case NUMERIC:
if (DateUtil.isCellDateFormatted(cell))
System.out.println(cell.getDateCellValue());
else
System.out.println(cell.getNumericCellValue());
break;
case FORMULA:
System.out.println(cell.getCellFormula());
break;
case BLANK:
System.out.println("");
break;
default:
System.out.println("");
}
System.out.println("\t");
}
}