用Java读取Excel文件(Simple JSP和Servlet)

时间:2012-04-21 09:01:59

标签: java jsp servlets

如何在java中读取Excel工作表而不将其视为数据库,并且不使用任何其他外部API。

5 个答案:

答案 0 :(得分:4)

在Java中没有直接处理Excel工作表的方法。您应该使用Apache POI Java API。

  

Apache POI是一个Java库,用于读取和编写各种Microsoft文件格式,尤其是基于OLE2和OOXML的Office相关文件格式,如XLS和DOCX。

让我们看一个阅读Excel表格的例子。它支持xlsxlsx文件格式。

import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

private Vector importExcelSheet(String fileName)
{
    Vector cellVectorHolder = new Vector();
    try
    {
        Workbook workBook = WorkbookFactory.create(new FileInputStream(fileName));
        Sheet sheet = workBook.getSheetAt(0);
        Iterator rowIter = sheet.rowIterator();

        while(rowIter.hasNext())
        {
            XSSFRow row = (XSSFRow) rowIter.next();
            Iterator cellIter = row.cellIterator();
            Vector cellStoreVector=new Vector();

            while(cellIter.hasNext())
            {
                XSSFCell cell = (XSSFCell) cellIter.next();
                cellStoreVector.addElement(cell);
            }
            cellVectorHolder.addElement(cellStoreVector);
        }
    }
    catch (Exception e)
    {
        System.out.println(e.getMessage());
    }
    return cellVectorHolder;
}

调用上面的方法,该方法将返回Vector,如下所示。

Vector dataHolder=importExcelSheet("Excel_file.xlsx");

注意:此处使用的Vector仅用于演示。不应该使用它,因为它在Java中已经过时了。使用Java Collection框架中提供的其他类型的集合。

答案 1 :(得分:1)

你不能。

Java SE和EE API不支持读取Excel电子表格。

(好吧,我想你可以花几个月时间阅读Excel规范并从头开始开发自己的电子表格阅读器。但这让我感到非常浪费。只需使用你拒绝的替代方案之一。)


Re:将电子表格转换为CSV并阅读以下内容的方法:

  • 这不是阅读电子表格。
  • 需要外部应用程序(例如Excel)才能从电子表格转换为CSV。
  • 这是有损的。您只能阅读电子表格的简单数据内容。其他一切都丢失了。

答案 2 :(得分:1)

您可以将 xls 文件转换为 csv 文件。 Java API支持csv文件。 您可以使用独立的I / O库读取csv文件。

答案 3 :(得分:1)

您必须使用Apache POI来阅读xls和xlsx文件

您可以根据自己的记忆限制使用HSSF,XSSF,SXSSF ....

答案 4 :(得分:0)

试试这个

    import java.io.File;
    import java.io.IOException;

    import jxl.Cell;
    import jxl.CellType;
    import jxl.Sheet;
    import jxl.Workbook;
    import jxl.read.biff.BiffException;

    public class ReadExcel {

   private String inputFile;

   public void setInputFile(String inputFile) {
    this.inputFile = inputFile;
        }

   public void read() throws IOException  {
    File inputWorkbook = new File(inputFile);
  Workbook w;
try {
w = Workbook.getWorkbook(inputWorkbook);
// Get the first sheet
Sheet sheet = w.getSheet(0);
// Loop over first 10 column and lines
for (int j = 0; j < sheet.getColumns(); j++) {
for (int i = 0; i < sheet.getRows(); i++) {
Cell cell = sheet.getCell(j, i);
CellType type = cell.getType();
if (cell.getType() == CellType.LABEL) {
System.out.println("I got a label "
                    + cell.getContents());
 }
  if (cell.getType() == CellType.NUMBER) {
System.out.println("I got a number "
                    + cell.getContents());
 }
 }
}
} catch (BiffException e) {
 e.printStackTrace();
}
}

public static void main(String[] args) throws IOException {
ReadExcel test = new ReadExcel();
test.setInputFile("c:/temp/lars.xls");
test.read();
        }

    }