Как получить текст, хранящийся в ячейке типа формулы в «Book1.xls», прочитанный java с использованием Apache POI
?
Вот мой код, который устанавливает формулу в ячейке:
JTextArea test = new javax.swing.JTextArea();
InputStream fis = new FileInputStream("D:\\StudyWell\\Book1.xls");
POIFSFileSystem fs = new POIFSFileSystem( fis );
HSSFWorkbook wb = new HSSFWorkbook(fs);
HSSFSheet sheet = wb.getSheetAt(0);
int count = sheet.getLastRowNum();
for(int j =0; j<=count; j++){
HSSFRow row=sheet.getRow(j);
HSSFCell cell=row.getCell(0);
HSSFRichTextString rts=cell.getRichStringCellValue();
String text = rts.toString();
an.append("\n");
an.setEditable(false);
a2.append(",");
a2.setEditable(false);
String otext = "A"+String.valueOf(j+1);
String atext = "E"+String.valueOf(j+1);
String formula = "SUBSTITUTE"+"("+otext+","+atext+","+"\"______________\""+")";
System.out.println(formula);
HSSFCell cell_temp = row.createCell(2);
cell_temp.setCellFormula(formula);
for (int i=1; i<rts.length(); i++) {
HSSFFont font = wb.getFontAt(rts.getFontAtIndex(i));
if(font.getUnderline()==1){
String s = "";
s = s + String.valueOf(text.charAt(i));
test.setText(s);
a2.append(test.getText());
an.append(test.getText());
}
}
}
String aforprint = a2.getText();
for(int a=0; a<=count; a++){
HSSFRow row=sheet.getRow(a);
HSSFCell cell_temp2 = row.createCell(4);
String[] temp3 = aforprint.split(",");
List<String> fixedlen = Arrays.asList(temp3);
ArrayList<String> alist = new ArrayList<String>(fixedlen);
if(alist.get(0).equals("")){
alist.remove(0);
}
String celltext = String.valueOf(alist.get(a));
cell_temp2.setCellValue(celltext);
}
try {
FileOutputStream out = new FileOutputStream(new File("D:\\StudyWell\\Book1.xls"));
wb.write(out);
out.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
} catch(Exception e) { e.printStackTrace(); } }
Как вы можете видеть, в ячейке C1
,.
есть формула Substitute(A1, E1)
. Теперь я хочу получить текст, хранящийся в C1
, в виде строки в java.
Вот что я попробовал:
JTextArea test = new javax.swing.JTextArea();
InputStream fis = new FileInputStream("D:\\StudyWell\\Book1.xls");
POIFSFileSystem fs = new POIFSFileSystem( fis );
HSSFWorkbook wb = new HSSFWorkbook(fs);
DataFormatter formatter = new DataFormatter();
HSSFSheet sheet = wb.getSheetAt(0);
int count = sheet.getLastRowNum();
for(int j =0; j<=count; j++){
HSSFRow row=sheet.getRow(j);
HSSFCell cellatc=row.getCell(2);
//String rts = cellatc.getStringCellValue();
//HSSFRichTextString rts = cellatc.getRichStringCellValue();
//String text = rts.toString();
String rts = formatter.formatCellValue(cellatc);
HSSFCell cellata = row.getCell(0);
cellata.setCellValue(rts);
cellatc.setCellValue("");
}
try {
FileOutputStream out = new FileOutputStream(new File("D:\\StudyWell\\Book1.xls"));
wb.write(out);
out.close();
}
catch (FileNotFoundException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
catch(Exception e) { e.printStackTrace(); }
Это дает OutOfMemory: Insufficient Java Heap Size error
, я увеличил java размер кучи до 3024MB. Даже после этого проблема все еще существует.
Есть ли другой способ выполнить эту задачу?
TIA!