简体   繁体   English

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

[英]How to set Author name to excel file using poi

I'm creating an excel (.xlsx) file using poi (java). 我正在使用poi(java)创建一个excel(.xlsx)文件。 After I create the excel file I see the excel file Author as "Apache POI". 创建excel文件后,我将excel文件Author视为“Apache POI”。 Is there any way to change that? 有什么方法可以改变吗?

Here is the code I'm using to create excel file... 这是我用来创建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;

    }
}

It's pretty straightforward: 这非常简单:

HSSF: HSSF:

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

XSSF: XSSF:

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

Have fun :) 玩得开心 :)

Not a direct answer but in case anyone needs to do this in NPOI (the .NET port of POI) here is the extension method I came up with ... it's basically what Olivier suggested - only implemented in C#: 不是直接的答案,但如果有人需要在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;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM