I'm creating an excel (.xlsx) file using poi (java). After I create the excel file I see the excel file Author as "Apache POI". Is there any way to change that?
Here is the code I'm using to create excel file...
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; } }
Overview. HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is the POI Project's pure Java implementation of the Excel 2007 OOXML (. xlsx) file format. HSSF and XSSF provides ways to read spreadsheets create, modify, read and write XLS spreadsheets.
Create an XSSFSheet from an existing sheet in the XSSFWorkbook. Create an XSSFSheet from an existing sheet in the XSSFWorkbook. Save the content in the underlying package part. Returns the workbook's data format table (a factory for creating data format strings).
It's pretty straightforward:
HSSF:
SummaryInformation summaryInfo = workbook.getSummaryInformation(); summaryInfo.setAuthor(author);
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#:
/// <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; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With