我正在创建一个java程序来读取excel表并创建一个逗号分隔文件。当我运行带有空白列的示例excel文件时,第一行工作正常,但其余行跳过空白单元格。 我已经阅读了将空白单元格插入行所需的代码更改,但我的问题是为什么第一行有效????
public ArrayList OpenAndReadExcel(){
FileInputStream file = null;
HSSFWorkbook workBook = null;
ArrayList <String> rows = new ArrayList();
//open the file
try {
file = new FileInputStream(new File("Fruity.xls"));
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("Could not open Input File");
e.printStackTrace();
}
// open the input stream as a workbook
try {
workBook = new HSSFWorkbook(file);
} catch (IOException e) {
// TODO Auto-generated catch block
System.out.println("Can't Open HSSF workbook");
e.printStackTrace();
}
// get the sheet
HSSFSheet sheet = workBook.getSheetAt(0);
// add an iterator for every row and column
Iterator<Row> rowIter = sheet.rowIterator();
while (rowIter.hasNext())
{
String rowHolder = "";
HSSFRow row = (HSSFRow) rowIter.next();
Iterator<Cell> cellIter = row.cellIterator();
Boolean first =true;
while ( cellIter.hasNext())
{
if (!first)
rowHolder = rowHolder + ",";
HSSFCell cell = (HSSFCell) cellIter.next();
rowHolder = rowHolder + cell.toString() ;
first = false;
}
rows.add(rowHolder);
}
return rows;
}
public void WriteOutput(ArrayList<String> rows) {
// TODO Auto-generated method stub
PrintStream outFile ;
try {
outFile = new PrintStream("fruity.txt");
for(String row : rows)
{
outFile.println(row);
}
outFile.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
-----
我输入.xls文件(抱歉不知道如何在这里插入excel表)
名称&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;原产地&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;原产地&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;级&GT;&GT;&GT;&GT;&GT;&GT;没有月份
Apple&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;美国&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;华盛顿&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; A&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 6
橙色&gt;&gt;&gt;&gt;&gt;&gt;美国&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;佛罗里达州&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; A&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 9
菠萝&GT;&GT;&GT;&GT;&GT;美国&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;夏威夷&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; B&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 10个
草莓&GT;&GT;&GT;&GT;美国&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;新泽西州&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; C&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt; 3
我的输出文本文件
名称,原产国,原产地,,,等级,月份号
苹果,美国,华盛顿,A,6.0
橙色,美国,佛罗里达,A,9.0
菠萝,USA,夏威夷,B,10.0
草莓,美国,新泽西州,C,3.0
Notice the two extra commas before the Grade column... This is because I have two blank columns there.<br/>
输出的其余部分缺少这些额外的逗号。
我正在使用Apache Poi-3.9-20121203.jar
答案 0 :(得分:16)
您应该阅读Apache POI网站上的Iterating Over Rows and Cells documentation。
CellIterator将仅返回已在文件中定义的单元格,这主要是指具有值或格式的单元格。 excel文件格式稀疏,并且不打算存储既没有值也没有格式化的单元格。
对于您的情况,您必须将格式应用于第一行,这会导致它们显示出来。
您需要通读documentation并按索引切换到查找。这也将允许您完全控制代码中处理空白与未使用单元格的方式。