在Java中创建Excel文件

52

我希望创建一个 Excel 文件,并像使用 Java 写文本文件一样写入数据。我尝试将文件扩展名从 .txt 更改为 .xls。但是我想在 Excel 文件中加粗字母。我该怎么做?

我已经尝试使用 JXL API,但每次我都必须创建一个标签,而我不想添加任何标签。不能编辑表格的行和列吗?


你用什么来创建你的Excel表格?你能展示一下你的代码吗? - Maksim
11个回答

90
//Find jar from here "http://poi.apache.org/download.html"
import  java.io.*;
import  org.apache.poi.hssf.usermodel.HSSFSheet;
import  org.apache.poi.hssf.usermodel.HSSFWorkbook;
import  org.apache.poi.hssf.usermodel.HSSFRow;

public class CreateExlFile{
    public static void main(String[]args) {
        try {
            String filename = "C:/NewExcelFile.xls" ;
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet("FirstSheet");  

            HSSFRow rowhead = sheet.createRow((short)0);
            rowhead.createCell(0).setCellValue("No.");
            rowhead.createCell(1).setCellValue("Name");
            rowhead.createCell(2).setCellValue("Address");
            rowhead.createCell(3).setCellValue("Email");

            HSSFRow row = sheet.createRow((short)1);
            row.createCell(0).setCellValue("1");
            row.createCell(1).setCellValue("Sankumarsingh");
            row.createCell(2).setCellValue("India");
            row.createCell(3).setCellValue("sankumarsingh@gmail.com");

            FileOutputStream fileOut = new FileOutputStream(filename);
            workbook.write(fileOut);
            fileOut.close();
            workbook.close();
            System.out.println("Your excel file has been generated!");

        } catch ( Exception ex ) {
            System.out.println(ex);
        }
    }
}

嗨,这为我创建了一个二进制文件。我该如何创建一个可以用Excel打开的Excel文件? - Dejell
2
小问题 - 你为什么要将 int 值转换为 short 并传入 HSSFSheet.createRow 方法中呢?API 需要的是 int 类型参数。 - David Levy
嗨 @Fangming,如果我有一个数组,并且我想创建与该数组长度相同的工作表。例如:如果我有一个长度为5的数组,则必须创建5个工作表;如果长度为4,则必须创建4个工作表。而且长度不是固定的。那么我该怎么做呢?提前致谢。 - Vibhav Chaddha
@Me_developer,您正在将新问题发布为评论。请改为提出一个新问题。 - Sankumarsingh
这会返回一个tar.gz文件,我怎么获取jar文件? - YourHelper

31
你可以使用Apache POI来创建本地二进制 xls 文件。
或者,你也可以使用JExcelApi,它是另一个Java库,对于处理Excel文件而言,它更加轻量级。

10

关于Apache POI的Excel生成,需要提前警告...

我知道这是一篇旧帖子,但如果有人像我一样再次查阅相关信息,这很重要。

它存在内存泄漏问题,虽然据说在2006年已经解决了,但最近仍有人遇到了类似问题。如果你想自动化生成大量的Excel(即如果你想生成一个大文件、大量小文件或两者兼而有之),我建议使用不同的API。或者增加JVM堆栈大小到荒谬的程度,如果你知道实际上不会使用太多不同的字符串,可以考虑字符串池技术(interning strings)。然而,当然,这意味着如果你有大量不同的字符串,你将面临完全不同的程序崩溃内存问题。所以,在采用这种方法之前,请考虑好这些风险。


4
现在是2015年,您对使用Apache POI感兴趣,但由于您的经验存在疑虑。然而,我只是想分享一下他们网站上的这个FAQ问题,我认为它可能与解决类似问题有关。 - Hesham Saleh
@Hesham的链接不再指向特定的问题。这个这个似乎相关。 - Evan
1
我发现使用GemBox.Spreadsheet for Java创建Excel文件可以获得更快的性能和更少的内存消耗/分配。例如,可以尝试这个示例 - NixonUposseen

7
File fileName = new File(".....\\Fund.xlsx");

public static void createWorkbook(File fileName) throws IOException {
    try {
        FileOutputStream fos = new FileOutputStream(fileName);
        XSSFWorkbook  workbook = new XSSFWorkbook();            

        XSSFSheet sheet = workbook.createSheet("fund");  

        Row row = sheet.createRow(0);   
        Cell cell0 = row.createCell(0);
        cell0.setCellValue("Nav Value");

        Cell cell1 = row.createCell(1);

        cell1.setCellValue("Amount Change");       

        Cell cell2 = row.createCell(2);
        cell2.setCellValue("Percent Change");

        workbook.write(fos);
        fos.flush();
        fos.close();
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

我该如何查看文件是否存在。我从早上开始就一直在处理它,但是没有用。请帮帮我。 - Sujatha Girijala

4
我创建了一个API,使创建Excel文件更加容易。

创建Excel - 从模板创建Excel

只需在实例化时设置所需的值,然后调用execute(),它将根据您所需的输出目录创建。
但在使用此功能之前,您必须有一个Excel模板,该模板将用作新创建的Excel文件的模板。
此外,您需要在项目的类路径中拥有Apache POI

你有其他工具可以生成PDF、CSV等文件吗? - Pasha
@PashaGharibi 你可以尝试使用JasperReports来生成PDF。它提供了创建报告模板的IDE。Jaspersoft Studio - Erieze Lagera

4

平面文件无法提供元信息。

我建议编写包含所需信息的HTML表格,并让Excel读取它。然后,您可以使用<b>标签来实现您想要的效果。


3
改变文件扩展名并不会改变其内容。扩展名只是一个标签。
如果你想使用Java处理Excel电子表格,请阅读Apache POI库相关文档。

0

我个人使用 IntelliJ IDEA,其中一些操作可能会更加复杂… 我认为。

因此,如果您想要创建一个带有扩展名的 Excel 文件:.CSV,.XLSX,.XLS,那么您必须下载 Apache Poi(最新版本)。 https://www.apache.org/dyn/closer.lua/poi/release/bin/poi-bin-5.1.0-20211024.zip

之后,您必须创建一个 MAVEN 项目,并在 pom.xml 中添加一些依赖项。 https://www.tutorialspoint.com/maven/maven_external_dependencies.htm

就这样。 这对我有效,希望您满意!

最好的问候, TalladegaRS6


这并没有提供对问题的答案。一旦您获得足够的声望,您将能够评论任何帖子; 相反,提供不需要询问者澄清的答案。- [来自审查] (/review/late-answers/30439989) - helvete
目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - MD. RAKIB HASAN

0

我也使用了JXLS:它将数据作为Map和带有正确语法的模板EXCEL接收,并返回正确填充的文件。 每个单元格中的数据必须是具有公共可见性的JavaBean

如果您必须在多个工作表中插入数据,则无法使用它:在这种情况下,我使用POI


0

要使用POI创建电子表格并格式化单元格,请参见Working with Fonts示例,并使用:

font.setBoldweight(Font.BOLDWEIGHT_BOLD);

POI的功能非常强大。有一些事情你不能做(比如创建VBA宏),但它可以读写带有宏的电子表格,因此你可以创建一个合适的模板表格,用POI来读取和操作它,然后再将其写出。


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