Я пытался придумать класс excelWriter, который сможет записать ячейку в файл excel с учетом столбца и строки. Это оказывается намного сложнее, чем предполагалось. Я планирую делать это каждый раз, когда вызывается метод write()
, он копирует то, что уже находится в строке (используя разработанный мной класс ExcelReader), а затем добавляет новый элемент в строку и, наконец, записывает его в Excel. лист. Я могу только предположить, что моя ошибка заключается в сохранении старой информации из-за того, что печатаются только определенные биты нужных строк.
public void write(int sheet,int row, int col, String data) throws IOException {
//update number of columns if it has grown
if(col>maxCol) {
maxCol=col;
}
//get sheet
XSSFSheet tempSheet=sheets.get(sheet);
// Specific row number
XSSFRow newRow = tempSheet.createRow(row-1);
//excel reader to get existing cells in row
ExcelReader reader=new ExcelReader(outputFile);
String[] oldCells=new String[maxCol];
if(reader.read(sheet, row, 1)!="DNE") {
//get old cells int array
for(int i=1;i<maxCol;i++) {
oldCells[i-1]=reader.read(sheet, row, i);
}
}
//fill in new cell
oldCells[col-1]=data;
//test print
for(int i=0;i<maxCol;i++) {
System.out.print(oldCells[i]+" ");
}
System.out.println("\n");
//fill row
for(int i=0;i<maxCol;i++) {
XSSFCell tempCell=newRow.createCell(i);
tempCell.setCellValue(oldCells[i]);
}
}
public static void main(String[] args) {
ExcelWriter writer=null;
try {
//new excel writer
writer=new ExcelWriter("/home/olee/git/team5-ftta/SampleFiles/testWorkbook.xlsx");
//new writer
writer.newSheet("yuh");
} catch (IOException e) {
e.printStackTrace();
}
try {
//write
writer.write(0, 1, 1, "one");
writer.write(0, 1, 2, "two");
writer.write(0, 1, 3, "three");
writer.write(0, 3, 2, "four");
writer.write(0, 4, 4, "five");
//complete write
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Это приводит к выводу листа Excel с (row, col) -> один в ячейке (1,2), два не записаны, три в ячейке (1,3), четыре в ячейке (3,2), пять в ячейке (4,4)