2012-06-21 23 views
11

Estoy creando un archivo excel (.xlsx) usando poi (java). Después de crear el archivo Excel, veo el autor del archivo Excel como "PDI de Apache". ¿Hay alguna forma de cambiar eso?Cómo establecer el nombre del autor para el archivo Excel utilizando poi

Aquí está el código que estoy usando para crear el archivo de 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; 

    } 
} 

Respuesta

15

Es bastante sencillo:

HSSF:

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

XSSF:

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

Diviértase :)

+0

¿Puede decirme por favor qué es este xmlProps para XSSF? – user1430989

+0

Gracias .. Lo tengo. – user1430989

+0

Hola Olivier Coilland, en el caso de XSSF funciona bien. Pero en el caso de HSSF, SummaryInformation summaryInfo = workbook.getSummaryInformation(); summaryInfo es nulo ... y no funciona ... – user1430989

5
No

una respuesta directa, pero en caso de que alguien tiene que hacer esto en NPOI (el puerto de .NET PDI) aquí es el método de extensión que se me ocurrió ... es básicamente lo Olivier sugerido: solo implementado en 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; 
    } 
} 
Cuestiones relacionadas