我正在使用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;
}
}
不是一个直接的答案,但如果有人需要在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;
}
}
这很简单:
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吗? 问候 问题答案: 经过大量的挖掘,我找到了解决方案。