如何读写Excel文件

199

我想要使用Java读取和写入一个具有3列和N行的Excel文件,并将每个单元格中的一个字符串打印出来。是否可以给我提供简单的代码片段?我需要使用任何外部库还是Java内置支持它?

我想要做以下事情:

for(i=0; i <rows; i++)
     //read [i,col1] ,[i,col2], [i,col3]

for(i=0; i<rows; i++)
    //write [i,col1], [i,col2], [i,col3]

使用GemBox.Spreadsheet for Java,这很简单,只需在工作表中迭代行和行中分配的单元格,并在每个单元格上调用ExcelCell.getValue()。例如,请参阅此读取示例,对于写入,您可以查看示例。 - bellpatricia
23个回答

0

如果你选择使用第三方库,可以尝试使用Aspose.Cells API,它可以使Java应用程序能够高效地创建(读/写)和管理Excel电子表格,而无需使用Microsoft Excel。

e.g

示例代码:

1.

//Load sample workbook
Workbook wb = new Workbook(dirPath + "sample.xlsx");

//Access first worksheet
Worksheet ws = wb.getWorksheets().get(0);

//Access cells iterator
Iterator itrat = ws.getCells().iterator();

//Print cells name in iterator
while(itrat.hasNext())
{
    Cell cell = (Cell)itrat.next();

    System.out.println(cell.getName() + ": " + cell.getStringValue().trim());
}
Workbook book = new Workbook("sample.xlsx");
Worksheet sheet = book.getWorksheets().get(0);
Range range = sheet.getCells().getMaxDisplayRange();//You may also create your desired range (in the worksheet) using, e.g sheet.getCells().createRange("A1", "J11");
Iterator rangeIterator = range.iterator();
while(rangeIterator.hasNext())
{
Cell cell = (Cell)rangeIterator.next();
//your code goes here.
}

希望这能有所帮助。
附言:我在Aspose担任支持开发/布道者。

-1
如果您需要在Java中处理办公文档,建议使用POI库。对于像您请求的简单读写Excel文档,可以使用CSV格式(也如上所述)。
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;

public class CsvWriter {
 public static void main(String args[]) throws IOException {

  String fileName = "test.xls";

  PrintWriter out = new PrintWriter(new FileWriter(fileName));
  out.println("a,b,c,d");
  out.println("e,f,g,h");
  out.println("i,j,k,l");
  out.close();

  BufferedReader in = new BufferedReader(new FileReader(fileName));
  String line = null;
  while ((line = in.readLine()) != null) {

   Scanner scanner = new Scanner(line);
   String sep = "";
   while (scanner.hasNext()) {
    System.out.println(sep + scanner.next());
    sep = ",";
   }
  }
  in.close();
 }
}

-1

这将会把 JTable 写入一个以制表符分隔的文件中,可以轻松地导入 Excel。 这是可行的。

如果您将 Excel 工作表保存为 XML 文档,您也可以使用代码构建 EXCEL 的 XML 文件。我已经在 Word 中做过这个操作,因此您不必使用第三方软件包。

这段代码可以剥离 JTable 并将其写入任何文本文件中,然后导入 Excel。 希望这有所帮助。

代码:

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JTable;
import javax.swing.table.TableModel;

public class excel {
    String columnNames[] = { "Column 1", "Column 2", "Column 3" };

    // Create some data
    String dataValues[][] =
    {
        { "12", "234", "67" },
        { "-123", "43", "853" },
        { "93", "89.2", "109" },
        { "279", "9033", "3092" }
    };

    JTable table;

    excel() {
        table = new JTable( dataValues, columnNames );
    }


    public void toExcel(JTable table, File file){
        try{
            TableModel model = table.getModel();
            FileWriter excel = new FileWriter(file);

            for(int i = 0; i < model.getColumnCount(); i++){
                excel.write(model.getColumnName(i) + "\t");
            }

            excel.write("\n");

            for(int i=0; i< model.getRowCount(); i++) {
                for(int j=0; j < model.getColumnCount(); j++) {
                    excel.write(model.getValueAt(i,j).toString()+"\t");
                }
                excel.write("\n");
            }

            excel.close();

        }catch(IOException e){ System.out.println(e); }
    }

    public static void main(String[] o) {
        excel cv = new excel();
        cv.toExcel(cv.table,new File("C:\\Users\\itpr13266\\Desktop\\cs.tbv"));
    }
}

你只需要将字符串数组存储在JTable中,并获取字符串以编写一个制表符分隔的“CSV”文件。在这个算法中,JTable是多余的。 - MGM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接