`
DavyJones2010
  • 浏览: 154235 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java POI: Excel to CSV Conversion Utility

阅读更多

1. First we need a util class

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellValue;
import org.apache.poi.ss.usermodel.FormulaEvaluator;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

public class ExcelUtil
{

    public static Cell getCell(Row row, int i)
    {
        Cell cell = row.getCell(i);
        if (null == cell)
        {
            cell = row.createCell(i);
        }
        return cell;
    }

    public static Row getRow(Sheet sheet, int i)
    {
        Row row = sheet.getRow(i);
        if (null == row)
        {
            row = sheet.createRow(i);
        }
        return row;
    }

    public static String getValue(Cell cell)
    {
        FormulaEvaluator evaluator = cell.getSheet().getWorkbook()
                .getCreationHelper().createFormulaEvaluator();

        CellValue cellValue = evaluator.evaluate(cell);

        switch (cellValue.getCellType())
        {
        case Cell.CELL_TYPE_BLANK:
            return "";
        case Cell.CELL_TYPE_STRING:
            return cellValue.getStringValue();
        case Cell.CELL_TYPE_NUMERIC:
            return Double.valueOf(cellValue.getNumberValue()).toString();
        case Cell.CELL_TYPE_BOOLEAN:
            return Boolean.valueOf(cellValue.getBooleanValue()).toString();
        case Cell.CELL_TYPE_ERROR:
            return String.valueOf(cellValue.getErrorValue());
        case Cell.CELL_TYPE_FORMULA:
            return null;
        default:
            return null;
        }
    }
}

 

2. Handler

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

public class FlatFileConversionUtil
{
    private static String headers = "aaa~bbb~ccc~ddd";

    private static String rowDelimeter = "~";
    private static String colDelimeter = ",";

    public static void convertToFlatFile(Sheet fromSheet, String csvFileName)
            throws IOException
    {
        StringBuilder fileContent = new StringBuilder();
        fileContent.append(headers);
        fileContent.append(rowDelimeter);
        String contents = readContents(fromSheet);
        fileContent.append(contents);
        writeToFile(csvFileName, fileContent.toString());
    }

    /**
     * Write fileContent to csv file <br/>
     * 
     * @param csvFileName
     * @param fileContent
     *            "111,222,333~111,222,333"
     * @throws IOException
     */
    private static void writeToFile(String csvFileName, String fileContent)
            throws IOException
    {
        BufferedWriter writer = new BufferedWriter(new FileWriter(csvFileName));

        String[] lines = fileContent.split(rowDelimeter);
        for (int i = 0; i < lines.length; i++)
        {
            String line = lines[i];
            writer.write(line);
            if (i != (lines.length - 1))
            {
                writer.newLine();
            }
        }

        writer.flush();
        writer.close();
    }

    /**
     * Output like:
     * "111,222,333,444,555~111,222,333,444,555~111,222,333,444,555" <br/>
     * 
     * @param fromSheet
     * @return
     */
    private static String readContents(Sheet fromSheet)
    {
        StringBuilder contents = new StringBuilder();
        for (int i = 1; i <= fromSheet.getLastRowNum(); i++)
        {
            String line = readRow(fromSheet, i, 109);
            contents.append(line);
            if (i != fromSheet.getLastRowNum())
            {
                contents.append(rowDelimeter);
            }
        }

        return contents.toString();
    }

    /**
     * Output like: "111,222,333,444,555" <br/>
     * 
     * @param fromSheet
     * @param rowNum
     * @param colCount
     * @return rowData: "data" + colDelimeter + "data"
     */
    private static String readRow(Sheet fromSheet, int rowNum, int colCount)
    {
        StringBuilder data = new StringBuilder();

        Row row = ExcelUtil.getRow(fromSheet, rowNum);
        for (int i = 0; i < colCount; i++)
        {
            Cell cell = ExcelUtil.getCell(row, i);
            String cellValue = ExcelUtil.getValue(cell).trim();
            data.append(cellValue);

            if ((colCount - 1) != i)
            {
                data.append(colDelimeter);
            }
        }

        return data.toString();
    }
}

 

3. Test case

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
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.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.junit.Test;


public class ExcelFileConversionTest
{
    @Test
    public void testConvertToCsv() throws InvalidFormatException, IOException
    {
        List<String> fileNameList = new ArrayList<String>();
        fileNameList.add("excel_1.xlsx");

        for (String fileName : fileNameList)
        {
            Workbook wb = WorkbookFactory.create(new File("/" + fileName));

            int sheetCount = wb.getNumberOfSheets();
            String fileNamePrefix = "ALM_";
            String fileNameSuffix = ".csv";
            for (int i = 0; i < sheetCount; i++)
            {
                Sheet sheet = wb.getSheetAt(i);
                String csvFileName = getCsvFileName(sheet, fileNamePrefix,
                        fileNameSuffix);
                FlatFileConversionUtil.convertToFlatFile(sheet, csvFileName);
            }
        }
    }

    private String getCsvFileName(Sheet sheet, String fileNamePrefix,
            String fileNameSuffix)
    {
        Row row = ExcelUtil.getRow(sheet, 1);
        Cell cell = ExcelUtil.getCell(row, 0);
        String cobDate = ExcelUtil.getValue(cell);
        return fileNamePrefix + cobDate + fileNameSuffix;
    }
}

 

 

分享到:
评论

相关推荐

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    java实现excel转csv

    在压缩包文件"excelToCsv"中,通常会包含一个示例Java程序,该程序实现了上述步骤,你可以参考它来理解和实践这个过程。通过这个程序,你可以将任意的Excel文件转换为CSV格式,方便后续的数据处理和分析。

    java操作csv文件(读、写)

    在做项目的时候,发现使用POI无法解析以csv文件结尾的文件,虽然csv文件能用Excel打开,但是csv文件没有像Excel一样有规定的电子表格形式,故使用POI无法解析csv文件,在网上找了一下,发现java有提供java csv文件来...

    Java POI 生成Excel时显示货币格式

    在Java开发中,Apache POI库是处理Microsoft Office文件(如Word、Excel)的强大工具。本文将深入探讨如何使用Java POI生成带有货币格式的Excel文件,这在财务报告和其他需要精确货币显示的应用场景中尤为关键。 ##...

    java poi导出excel

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java中,如果你需要导出Excel文件,Java POI是一个非常实用的工具。下面将详细介绍如何使用Java POI来实现...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。在本示例中,我们将深入探讨如何利用POI库来生成Excel中的图表曲线,这对于数据可视化和报告生成...

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java Poi 导出excel(支持各种设置字体、颜色、垂直居中)

    Java Poi 解析EXCEL数据

    Java Poi库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在Java世界中,Poi是解析和操作这些文件的首选工具,尤其在数据导入导出、自动化测试、...

    java poi处理excel数据

    Java POI是Apache软件基金会下的一个开源项目,主要用于读写Microsoft Office格式的文件,特别是Excel。在Java开发中,当你需要处理Excel数据时,POI库是一个强大的工具。本压缩包包含了一些关键资源,帮助你理解和...

    JAVA poi 做EXCEL导出(包含图片) 完整版

    在Java编程环境中,Apache POI库是一个非常实用的工具,用于读取、写入和修改Microsoft Office格式的文件,特别是Excel(.xlsx 和 .xls)文件。本教程将详细介绍如何使用JAVA POI库来创建一个包含图片的完整Excel...

    Java poi 实现excel导入导出

    在Java编程环境中,Apache POI库是一个非常重要的工具,它允许开发者读取、写入和修改Microsoft Office格式的文件,尤其是Excel(.xlsx 和 .xls)文件。本教程将深入探讨如何利用Java POI库来实现Excel的导入与导出...

    Java Poi 操作excel的API 好用

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,尤其是Excel。它提供了丰富的API,使得在Java环境中操作Excel文件变得极其便捷。本文将深入探讨Java POI的使用,包括其核心功能、API使用示例...

    java poi操作excel批量导入导出项目需要的jar包

    Java中的Apache POI库是处理Microsoft Office文档的强大工具,尤其在Excel操作方面。它允许开发者在Java应用程序中创建、修改和读取Excel文件。在进行批量导入和导出Excel数据时,Apache POI是一个非常实用的选择。...

    JAVA POI Excel转Html

    JAVA POI Excel转Html,代码和所需的jar都在压缩包,项目在线预览需求,实现后分享下

    java poi 操作Excel

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在Java世界中,如果你想对Excel进行读写操作,POI库是不可或缺的工具。下面将详细介绍如何使用Java POI来操作...

    Java POI 生成Excel(xlsx)文件

    Java POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel、Word和PowerPoint等。在Java中,如果你需要生成或操作Excel文件,尤其是.xlsx格式(这是Excel 2007及以上版本使用的Open XML格式),...

    JAVA POI导出EXCEL代码

    Java POI库是Apache软件基金会的一个项目,专门用于读写Microsoft Office格式的文件,包括Excel。在Java开发中,我们经常使用POI库来处理Excel数据,如读取、写入和修改Excel文件。本篇文章将详细介绍如何使用JAVA ...

    java使用POI导出 Excel工具类

    java使用POI导出 Excel+图片工具类 ,里面含有poi jar包,只调用接口即可直接保存Excel。使用的时候需先把数据封装,具体包装需根据实际导出数据进行处理。文件demo中只提供包装格式。

    java poi导出图片到excel示例代码

    Java POI导出图片到Excel示例代码详解 Java POI是Java开发中常用的开源库,用于读写Microsoft Office文件格式,包括Excel、Word、PowerPoint等。今天,我们将介绍如何使用Java POI将图片导出到Excel中。 标题解释 ...

    java POI读取excel文件数据

    Java POI库是Apache软件基金会开发的一个开源项目,专门用于处理Microsoft Office格式的文件,如Word、PowerPoint和尤其在本场景中提到的Excel。它提供了API,使得开发者能够使用Java来读取、写入和修改Excel文件。...

Global site tag (gtag.js) - Google Analytics