我在这里陷入了僵局。
我在ArrayList中存储了值。每个值都是一个字符串,它由几个其他字符串组成,用分隔符(##)分隔。
例如:ArrayList lst有以下4个值。
string[]arry=erow.split(“##”);
在这个for循环中,我使用另一个for循环for arry.length()来获取每个字符串(比如aaa),并使用Apache POI将其写入excel上的单元格。最后,我想在excel的单元格A1中使用aaa,单元格B1中使用bbb,单元格C1中使用ccc,单元格A2中使用d,以此类推。
我面临的问题是,在每次迭代之后,上一列(A1到A4、B1到B4等)中的值都被擦除。最后,只剩下C1到C4值。
如果我使用一个在A1到C4单元格中包含一些数据的excel,并使用getRow、getCell和setCellValue方法,事情就会非常好。aaa、bbb值被写入相应的单元格。
但每次我都不能用excel处理现有的数据。我想把数据写到新的excel文件上。如果excel没有任何数据,getCell、getRow方法将抛出NPE。
请帮忙。我如何解决这个问题?
xlo.createExcel(xlPath, xl_name, tabName,".xls");
for(int s=0;s<vals.size();s++)
{
erow = vals.get(s);
String[] cval = erow.split("###");
for(int c=0; c<cval.length;c++)
{
xlo.writeExcel(xlPath+"/"+xl_name, tabName, s, c, cval[c]);
System.out.println(cval[c]);
}
System.out.println();
}
System.out.println("File created ---> "+xl_name+"\n");
public void writeExcel(String xlPath, String xlSheet, int rowNum, int cellNum, String inputString) throws Exception
{
FileInputStream fis = new FileInputStream(xlPath);
Workbook wb = WorkbookFactory.create(fis);
Sheet sh = wb.getSheet(xlSheet);
Row row = sh.createRow(rowNum);
Cell cell=row.createCell(cellNum);
CellStyle cs = wb.createCellStyle();
//cs.setWrapText(true);
cell.setCellStyle(cs);
cell.setCellValue(inputString);
FileOutputStream fos=new FileOutputStream(xlPath);
wb.write(fos);
wb.close();
fos.close();
}
public void createExcel(String path, String fileName, String tabName, String fileExtn) throws Exception
{
Workbook workbook = new XSSFWorkbook();
workbook.createSheet(tabName);
FileOutputStream fileOut;
try
{
fileOut = new FileOutputStream(path+"/"+fileName+fileExtn);
workbook.write(fileOut);
fileOut.close();
workbook.close();
}
catch (Exception e)
{
System.out.println("Excel not created!");
}
}
我以前必须这样做(但是使用、
分隔符)。以下是##
代码的简化版本:
private XSSFWorkbook writeToExcel(LinkedHashMap<Integer, String> formattedReport) {
try {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
int rowIndex = sheet.getLastRowNum();
Set<Integer> keySet = formattedReport.keySet();
for (Integer key : keySet) {
XSSFRow row = sheet.createRow(rowIndex++);
String line = formattedReport.get(key);
String[] strArr = line.split("##");
int cellCount = 0;
for (String str : strArr) {
XSSFCell cell = row.createCell(cellCount++);
cell.setCellValue(str);
}
}
return workbook;
} catch (Exception e) {
e.printStackTrace();
}
return null; //or return new XSSFWorkbook();
}
这应该会像你想要的那样工作。它使用一个映射,所以您必须将其更改为使用ArrayList
,但它的功能应该没有什么不同。
在上述情况下,如果用户为空,则给出NPE。如何避免NPE?
本文向大家介绍Java中避免空指针异常的方法,包括了Java中避免空指针异常的方法的使用技巧和注意事项,需要的朋友参考一下 没人会喜欢空指针异常!有什么方法可以避免它们吗?或许吧。。 本文将讨论到以下几种技术 1.Optional类型(Java 8中新引入的) 2.Objects类(Java 7中原有的) Java 8中的Optional类 它是什么? 1.Java 8中新引入的类型 2.它是作为
本文向大家介绍利用Java8 Optional如何避免空指针异常详解,包括了利用Java8 Optional如何避免空指针异常详解的使用技巧和注意事项,需要的朋友参考一下 前言 空指针是我们最常见也最讨厌的异常,为了防止空指针异常,你不得在代码里写大量的非空判断。 Java 8引入了一个新的Optional类。用于避免空指针的出现,也无需在写大量的if(obj!=null)这样的判断了,前提是你得
在这种情况下是否可以避免ArrayIndexOutOfBoundsException??
问题内容: 我已经阅读了很多有关代码重构和避免if else语句的主题。实际上,我有一堂课,我在使用很多if-else条件。 更多详细信息:我正在使用拉式解析器,并且在我的肥皂响应的每一行上,我都会检查是否有我感兴趣的标签,如果没有,请检查其他标签,等等: 现在,我想使用somethimg,而不是其他条件,但是我不知道是什么。 您能给我一个例子还是一个很好的教程页面? 谢谢。 问题答案: 在这种特
我即将对我的项目进行一个重大的技术更改,从ANT转移到Gradle。这个项目从来没有发布过--它仍在开发中。我想标记最后的旧技术版本,以便可以找到参考或逆转。但我不想暗示有任何一种释放。 然后 我之前向GitHub提交了一个支持请求,但当时他们有一些支持积压,所以我的请求被关闭了。