标签: xssf

如何获得XSSF CELLSTYLE的字体颜色?

我试图获取XLSX文件的单元格的字体颜色.我正在使用apache poi.我能够获得单元格颜色而不是字体颜色.任何建议将不胜感激.

谢谢

apache-poi xssf

3
推荐指数
1
解决办法
5627
查看次数

NoClassDefFoundError:使用java处理excel表时出现UnsupportedFileFormatException

我正在编写一个Java程序,它从.xlsx文件中读取并以.csv格式提供输出.这是我的代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.text.SimpleDateFormat; 
import java.util.Date;
import java.util.Iterator;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;   
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;

public class xlsxToCsv {

    public static void main(String[] args) {

        long startTime = System.currentTimeMillis();

        File inputFile = new File("C:\\inputFile.xlsx");
        File outputFile = new File("C:\\outputFile.csv");

        xlsx(inputFile, outputFile);

        long stopTime = System.currentTimeMillis();
        long elapsedTime = stopTime - startTime;

        System.out.println(elapsedTime);

   }

   private static void xlsx(File inputFile, File outputFile) {

        //for storing data …
Run Code Online (Sandbox Code Playgroud)

java excel xlsx apache-poi xssf

3
推荐指数
1
解决办法
2万
查看次数

如何使用SXSSF写入现有文件?

我有一个.xlsx文件,其中包含包含不同数据的多个工作表。在所有工作表中,一个工作表需要容纳近100,000行数据,并且数据需要使用带poi的Java写入。

对于SXSSFWorkbook来说,这似乎非常简单快捷,其中我只能在内存中保留100行,但是缺点是我只能写入一个新文件(或覆盖现有文件)。

另外,不允许我“加载”现有文件,即

 SXSSFWorkbook wb = new SXSSFWorkbook(file_input_stream) 
Run Code Online (Sandbox Code Playgroud) 不允许。

我可以使用Workbook工厂:

Workbook workbook = new SXSSFWorkbook();
workbook = WorkbookFactory.create(file_input_stream);
Run Code Online (Sandbox Code Playgroud)

但是当我需要冲洗行时,

 ((SXSSFSheet)sheet).flushRows(100); 
Run Code Online (Sandbox Code Playgroud)

我收到错误消息,不允许从XSSFSheet到SXSSFSheet进行类型转换。

我试图查看是否有任何方法可以在不同的工作簿之间复制工作表,但到目前为止,似乎必须逐个单元地完成工作。

有关如何解决此问题的任何见解?

java excel apache-poi xssf

3
推荐指数
1
解决办法
1万
查看次数

Apache POI背景颜色样式似乎无法正常工作

晚上好!我在使用apache poi v.3.14时遇到了一些麻烦,当我使用Libreoffice或Excel打开渲染的xlsx时,样式未正确应用.

我有这个代码:

class... {

private XSSFCellStyle doubleLockStyle;
/**
     * Create default cell style.
     *
     * @param myWorkBook
     * @return The cell style.
     */
    private XSSFCellStyle createCell(XSSFWorkbook myWorkBook, boolean locked) {
        XSSFCellStyle cs = myWorkBook.createCellStyle();
        cs.setAlignment(HorizontalAlignment.CENTER);
        if (locked) {
            cs.setFillBackgroundColor(LOCKED_COLOR); //rgb from awt colors
            cs.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            cs.setLocked(true);
        } else {
            cs.setLocked(false);
        }
        return cs;
    }

     /**
     * Prepare cell styles.
     *
     * @param myWorkBook
     */
    private void initStyles(XSSFWorkbook myWorkBook) {
     ...
        short df = myWorkBook.createDataFormat().getFormat("0.00");
        doubleLockStyle = createCell(myWorkBook, true);
        doubleLockStyle.setDataFormat(df); …
Run Code Online (Sandbox Code Playgroud)

java excel xlsx apache-poi xssf

3
推荐指数
1
解决办法
3528
查看次数

找不到符号Workbook.close()

我看到与此标头有关的多个问题,但没有得到我的答案。

 private void createHandBackFile(XSSFSheet sheet, String programId, XSSFWorkbook workbook) throws IOException {
    String output = "C:\\Users\\muddassirr\\Downloads\\Personal\\STORE\\Output";

    File file = new File(output + File.separator + programId);
    if (!file.exists()) {
        file.mkdirs();
    }
    int noOfColumns = sheet.getRow(0).getPhysicalNumberOfCells();
    for(int i = 0; i < noOfColumns; i++) {
        sheet.autoSizeColumn(i);
    }
    FileOutputStream outputStream = new FileOutputStream(new File(output + File.separator + programId + File.separator + "HAND_BACK.xlsx"));
    workbook.write(outputStream);
    outputStream.close();
    workbook.close();
}
Run Code Online (Sandbox Code Playgroud)

没有编译错误。但是当我运行时,我得到运行时错误提示

java: cannot find symbol
symbol:   method close()
location: variable workbook of type org.apache.poi.xssf.usermodel.XSSFWorkbook
Run Code Online (Sandbox Code Playgroud)

java apache-poi xssf

3
推荐指数
1
解决办法
1313
查看次数

使用Apache.POI读写Excel的Java内存问题

我正在尝试读取 excel 文件...进行一些更改...保存到新文件。

我用按钮创建了小表单......按下按钮时......

  • 它将加载 Excel 文件并将所有数据加载到我创建的类的数组列表中。
  • 它将遍历数组列表并更改对象中的一些属性。
  • 它将数据保存到新的 Excel 文件中。
  • 最后,它将清除阵列列表并显示完成的消息框。

现在的问题是内存问题。
加载表单后,我可以在 Windows 任务管理器中看到...javaw 使用了大约 23MB。
在读写 excel 期间……内存高达 170MB。
阵列列表被清除后....内存没有清除并保持在 150MB 左右。

以下代码附加到事件以单击按钮。

MouseListener mouseListener = new MouseAdapter() {
        public void mouseReleased(MouseEvent mouseEvent) {
            if (SwingUtilities.isLeftMouseButton(mouseEvent)) {
                ArrayList<Address> addresses = ExcelFunctions.getExcelData(fn);
                for (Address address : addresses){
                    address.setZestimate(Integer.toString(rnd.nextInt(45000)));
                    address.setRedfinestimate(Integer.toString(rnd.nextInt(45000)));
                }
                ExcelFunctions.saveToExcel(ofn,addresses);
                addresses.clear();
                JOptionPane.showMessageDialog(null, "Done");
            }
        }
    };
Run Code Online (Sandbox Code Playgroud)


此类中读取/Excel 文件的代码。

public class ExcelFunctions {
public static ArrayList<Address> getExcelData(String fn)
{
    ArrayList<Address> output = new ArrayList<Address>();
    try
    {
        FileInputStream file …
Run Code Online (Sandbox Code Playgroud)

java memory-leaks apache-poi xssf

2
推荐指数
1
解决办法
5550
查看次数

Apache POI由于独立或xmlns而生成损坏的excel xlsx文件?

我有一个Web应用程序(tomcat 8.5.4,java 1.7.0_72),它以前使用Apache POI生成有效的xlsx excel文件.我正在努力转换应用程序以使用maven管理jar依赖项,现在生成的文件被excel视为已损坏(或无效).我根本没有更改生成文件的代码,并且包含的​​jar大部分都与一些版本更改相同,并删除了一些未使用但不在maven依赖关系树中的jar(删除了下面列出的jar).

有谁知道我可以做什么导致POI生成不同的文件或为什么excel认为这些更改使它无效?我搜索了很多POI和损坏的excel文件的错误,看起来POI中有几个错误,如果它可能破坏现有文件或破坏创建大文件,但在这种情况下似乎没有任何看起来应用.我在这里看到了几个问题,看起来它们可能相似,但最终没有应用.

差异

当我将之前和之后创建的xlsx文件更改为zip文件并提取它们然后将目录与windiff进行比较时,差异是(工作 - >已损坏).

[CONTENT_TYPES] .XML

 <?xml version="1.0" encoding="UTF-8" standalone="no"?> -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> -> <Types>
Run Code Online (Sandbox Code Playgroud)

_rels.rels,_rels\workbook.xml.rels

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
 -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> -> <Relationships>
Run Code Online (Sandbox Code Playgroud)

docprops\core.xml

创造的时间不同

<?xml version="1.0" encoding="UTF-8" standalone="no"?> -> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
Run Code Online (Sandbox Code Playgroud)

XL\styles.xml

numFmtId低1

xl\worksheets\sheet1.xml,docprops\app.xml,xl\_ sharedstrings.xml,xl\workbook.xml

相同

罐子

我的公司正在使用本地神器存储库,而不是指向官方maven存储库,所以加载所有依赖项很有趣.我的假设是这是由我丢失的jar或使用错误的版本引起的,但是我实际上并没有产生任何错误,只是得到一个糟糕的文件.

我包括poi-3.1.11.jar,poi-ooxml-3.11.jar和poi-ooxml-schemas-3.11.jar.以前我们在tomcat/lib中使用了commons-codec 1.9,在WEB-INF/lib中使用了commons-codec 1.3.在maven我已经包含1.9,虽然我也尝试回到1.3并且文件仍然被破坏.

我尝试升级到3.1.14的所有poi版本,但这并没有解决它.我试着回到之前正在工作但没有解决它的确切的poi [-ooxml-schemas] -3.11-20141221罐子.我尝试将SXSSFWorkbook切换到正常的XSSFWorkbook,但没有解决它.

这是我转换为maven时删除的jar列表,​​其中任何一个都会对apache poi产生影响吗?

ecj-4.5.1
el-impl-2.2
itext-2.0.8
jimi-1.0
js
opencsv-1.8
standard (1.1.2)
Run Code Online (Sandbox Code Playgroud)

apache-poi xssf

2
推荐指数
1
解决办法
1910
查看次数

SXSSF与Excel表

我正在尝试在流式工作簿(SXSSFWorkbook)中创建Excel表。API不直接支持它,但是通过访问基础XSSFWorkbook(workbook.getXSSFWorkbook),我已经取得了一些成功。

当我在Excel(2007)中打开文件时,它显示“ Excel在“ test.xlsx”中发现了不可读的内容。您要恢复此工作簿的内容吗?”。单击是可以成功修复该工作簿,并且我得到正确的结果。

日志中显示“修复的记录:/xl/tables/table1.xml部分中的表(表)”。

任何人都有关于如何避免Excel错误的想法?

下面是一个示例:

public class SXSSFTest {

    private static final int NB_ROWS = 5;
    private static final int NB_COLS = 5;

    public static void main(String[] args) throws Exception {

        try (SXSSFWorkbook workbook = new SXSSFWorkbook();
             FileOutputStream outputStream = new FileOutputStream("C:\\test.xlsx")) {

            SXSSFSheet sheet = workbook.createSheet();

            fillSheet(sheet);

            String dataRange = new AreaReference(
                    new CellReference(0, 0),
                    new CellReference(NB_ROWS - 1, NB_COLS - 1))
                    .formatAsString();

            CTTable cttable = workbook.getXSSFWorkbook()
                    .getSheetAt(0)
                    .createTable()
                    .getCTTable();

            CTTableStyleInfo tableStyle = cttable.addNewTableStyleInfo();
            tableStyle.setName("TableStyleMedium17");

            cttable.setRef(dataRange);
            cttable.setDisplayName("TABLE"); …
Run Code Online (Sandbox Code Playgroud)

excel apache-poi xssf

2
推荐指数
1
解决办法
1066
查看次数

无法使用Apache POI读取Excel 2010文件.第一行数是-1

我想这将testfile将与Apache POI API(当前版本3-10决赛).以下测试代码

import java.io.FileInputStream;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelTest {

    public static void main(String[] args) throws Exception {
        String filename = "testfile.xlsx";
        XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream(filename));
        XSSFSheet sheet = wb.getSheetAt(0);
        System.out.println(sheet.getFirstRowNum());
    }
}
Run Code Online (Sandbox Code Playgroud)

导致第一行数为-1(现有行返回为null).测试文件由Excel 2010创建(我无法控制该部分),可以使用Excel读取而不会出现警告或问题.如果我使用我的Excel版本(2013)打开并保存文件,它可以按预期完美地读取.

我无法阅读原始文件或我如何能够获得的任何提示都受到高度赞赏.

java excel apache-poi excel-2010 xssf

1
推荐指数
1
解决办法
3406
查看次数

如何使用列名称迭代 Excel 工作表中的当前行?

我需要解析 Excel 工作表并从每一行检索值以将其存储在数据库中。目前我正在根据每个单元格所保存的值的类型来执行此操作。在当前情况下这是可以的,因为我只需要处理 2 列。但我有一个新的要求,需要解析包含超过 12 列的 Excel 工作表。这种情况下怎么办呢?如果我使用带有表头的结构化表,有没有办法可以根据列迭代每一行?

我当前的代码如下。

        File file = new File(UPLOAD_LOCATION + fileUpload.getFile().getOriginalFilename());
        FileInputStream excelFile = new FileInputStream(file);

        Workbook workbook = new XSSFWorkbook(excelFile);
        Sheet datatypeSheet = workbook.getSheetAt(0);
        Iterator<Row> iterator = datatypeSheet.iterator();
        while (iterator.hasNext()) {
            Row currentRow = iterator.next();
            Iterator<Cell> cellIterator = currentRow.iterator();

            while (cellIterator.hasNext()) {

                Cell currentCell = cellIterator.next();
                // getCellTypeEnum shown as deprecated for version 3.15
                // getCellTypeEnum ill be renamed to getCellType starting
                // from version 4.0
                if (currentCell.getCellTypeEnum() == CellType.STRING) {
                    System.out.print(currentCell.getStringCellValue() + …
Run Code Online (Sandbox Code Playgroud)

java excel apache-poi xssf

1
推荐指数
1
解决办法
3650
查看次数

标签 统计

apache-poi ×10

xssf ×10

java ×7

excel ×6

xlsx ×2

excel-2010 ×1

memory-leaks ×1