当前位置: 首页 > 知识库问答 >
问题:

如何使用poi将作者名称设置为excel文件

云项禹
2023-03-14

我正在使用poi(java)创建一个excel(.xlsx)文件。创建excel文件后,我看到excel文件的作者是“Apache POI”。有什么办法可以改变吗?

这是我用来创建excel文件的代码。。。

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class CreateExcelFile {

    public static void main(String[] args) {
        /** Name of excel file that we are going to create **/
        String fileName = "C:\\temp\\testPOIWrite.xlsx";
        writeDataToExcelFile(fileName);
    }

    /** This method writes data to new excel file **/
    private static void writeDataToExcelFile(String fileName) {

        String[][] excelData = preapreDataToWriteToExcel();

        XSSFWorkbook myWorkBook = new XSSFWorkbook();
        Sheet mySheet = myWorkBook.createSheet();
        Row myRow = null;
        Cell myCell = null;

        for (int rowNum = 0; rowNum < excelData[0].length; rowNum++) {
            myRow = mySheet.createRow(rowNum);

            for (int cellNum = 0; cellNum < 4; cellNum++) {
                myCell = myRow.createCell(cellNum);
                myCell.setCellValue(excelData[rowNum][cellNum]);
            }
        }

        try {
            FileOutputStream out = new FileOutputStream(fileName);
            myWorkBook.write(out);
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    /** Prepare some demo data as excel file content **/
    public static String[][] preapreDataToWriteToExcel() {
        String[][] excelData = new String[4][4];
        excelData[0][0] = "First Name";
        excelData[0][1] = "Last Name";
        excelData[0][2] = "Telephone";
        excelData[0][3] = "Address";

        excelData[1][0] = "Kushal";
        excelData[1][1] = "Paudyal";
        excelData[1][2] = "000-000-0000";
        excelData[1][3] = "IL,USA";

        excelData[2][0] = "Randy";
        excelData[2][1] = "Ram Robinson";
        excelData[2][2] = "111-111-1111";
        excelData[2][3] = "TX, USA";

        excelData[3][0] = "Phil";
        excelData[3][1] = "Collins";
        excelData[3][2] = "222-222-2222";
        excelData[3][3] = "NY, USA";

        return excelData;

    }
}

共有2个答案

车思淼
2023-03-14

不是一个直接的答案,但如果有人需要在NPOI(POI的.NET端口)中这样做,这里是我提出的扩展方法。。。这基本上是Olivier建议的-仅在C中实现:

/// <summary>
/// Sets the author of this workbook.
/// </summary>
/// <param name="workbook"></param>
/// <param name="author"></param>
public static void SetAuthor(this IWorkbook workbook, string author)
{
    if (workbook is NPOI.XSSF.UserModel.XSSFWorkbook)
    {
        var xssfWorkbook = workbook as NPOI.XSSF.UserModel.XSSFWorkbook;
        var xmlProps = xssfWorkbook.GetProperties();
        var coreProps = xmlProps.CoreProperties;
        coreProps.Creator = author;
        return;
    }

    if (workbook is NPOI.HSSF.UserModel.HSSFWorkbook)
    {
        var hssfWorkbook = workbook as NPOI.HSSF.UserModel.HSSFWorkbook;
        var summaryInfo = hssfWorkbook.SummaryInformation;

        if (summaryInfo != null)
        {
            summaryInfo.Author = author;
            return;
        }

        var newDocInfo = NPOI.HPSF.PropertySetFactory.CreateDocumentSummaryInformation();

        var newInfo = NPOI.HPSF.PropertySetFactory.CreateSummaryInformation();
        newInfo.Author = author;

        hssfWorkbook.DocumentSummaryInformation = newDocInfo;
        hssfWorkbook.SummaryInformation = newInfo;

        return;
    }
}
田德馨
2023-03-14

这很简单:

HSSF:

SummaryInformation summaryInfo = workbook.getSummaryInformation();
summaryInfo.setAuthor(author);

XSSF:

POIXMLProperties xmlProps = workbook.getProperties();    
POIXMLProperties.CoreProperties coreProps =  xmlProps.getCoreProperties();
coreProps.setCreator(author);

有乐趣:)

 类似资料:
  • 下面的代码用于获取excel文件(.xlsx)的工作表名称 上面的代码存在的问题是,为一个9MB大小的文件创建需要占用大量内存(~700MB)&时间很长(5-6s)。即使将设置为也不会释放占用的内存(我知道可能被调用,也可能不被调用&JVM不会仅仅因为我将变量设置为null而释放内存) 我确实浏览了Workbook,XSSFWorkbook&根据我的理解,没有任何方法可以帮助我获得内存印记较低的工

  • 问题内容: 我有以下代码用于获取excel文件的工作表名称(.xlsx) 我上面的代码存在的问题是,为9MB大小的文件创建文件需要花费大量内存(〜700MB)和较长时间(5-6s)。即使将设置为,也不会释放占用的内存(我知道可能会叫,也可能不会叫&JVM不会因为我将变量设置为null而释放内存) 我确实浏览了Workbook,XSSFWorkbook的文档,据我了解,没有任何方法可以帮助我获得内存

  • 问题内容: 如何使用Apache POI在Excel文件中获取列名,以确保按预期顺序排列列。 问题答案: 或这个: 行索引从0开始。

  • 我有一个Excel文件,它有5列,几乎没有合并单元格、空白单元格、日期和其他文本信息(普通Excel文件)。 我正在使用java中的POI API读取此文件。我能够使用iText jar将文件转换为pdf表。 但是,整个格式不会复制到pdf中。(例如,合并的单元格进入一列,其他格式或设置都消失了)。 将创建一个简单的pdf表格。 如何保留与excel中相同的格式?(我想要pdf格式的excel表的

  • 问题内容: 我正在使用poi 3.6 我能够正确创建Excel。但是,当我尝试将单元格类型设置为number时,它总是为我提供常规的单元格类型。 即在新创建的excel中,当我右键单击并设置单元格格式->我总是发现数字是General。 我的代码是这样的 您能建议一下这里缺少什么吗? 问题答案: 您也可以尝试这种方法: 当然,请查看有关数据格式的文档和示例。

  • 问题内容: 我想阅读给应用于xlsx文档中单元格的样式的名称。我已经提取了文件,并且在xl / styles.xml中可以找到样式名称: 我想要的样式名称是“测试样式”。目前,我有以下代码,并且我可以获取xfId而不是名称: 有谁知道我是否可以用poi获得样式名称,以及我将如何进行? 如果这不可能,那么我可以基于xfId将背景颜色设为rgb吗? 问候 问题答案: 经过大量的挖掘,我找到了解决方案。