`
xinyoulinglei
  • 浏览: 126362 次
社区版块
存档分类
最新评论

java操作execl文件(2003与2007不兼容问题)

    博客分类:
  • java
阅读更多

package com.huawei.bss.execlComm;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import java.util.Vector;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
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.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ProcessXSL {
HSSFWorkbook wb = new HSSFWorkbook();
String workbookFileName = "d:/资源池人员跟踪_20120911.xlsx";
protected final Log log = LogFactory.getLog(getClass());

public ProcessXSL() {
}

/**
* 创建 Execl 文件
*
* @param wb
*            HSSFWorkbook
* @param exportInfo
*            BaseDataExportInfo
*/
public void createWorkBookSheet(BaseDataExportInfo exportInfo) {

Vector cellList = null;
if (exportInfo.getWorkbookFileName() != null)
workbookFileName = exportInfo.getWorkbookFileName() + ".xlsx";
try {

HSSFSheet sheet = wb.createSheet(exportInfo.getSheetIndex() + "");
wb.setSheetName(exportInfo.getSheetIndex(), exportInfo
.getSheetName());

/** 设置列宽 */

for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
if (i == 1 || i == exportInfo.getTableHead().size() - 1) {
sheet.setColumnWidth(i,  7000);
} else {
sheet.setColumnWidth(i,  4000);
}
}

/** 合并单元格 */
//Region(int rowFrom, short colFrom, int rowTo, short colTo)与CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)
sheet.addMergedRegion(new CellRangeAddress(0,  0, 0, (exportInfo.getTableHead().size() - 1)));

/** 表 标题 */
HSSFRow row = sheet.createRow((short) 0);
row.setHeight((short) 500); // 设置行高

HSSFFont titleFont = wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 16);
titleFont.setBoldweight((short) 20);
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setFont(titleFont);

titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); // 居中

row = this.createCell(row, (short) 0, titleStyle, exportInfo
.getSheetTitle());

/** 表头 */
HSSFFont headFont = wb.createFont();
headFont.setFontName("宋体");
headFont.setFontHeightInPoints((short) 12);
headFont.setBoldweight((short) 20);

HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setFont(headFont);
headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框

headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框

headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框

headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框

headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中

HSSFRow row2 = sheet.createRow((short) 1);
row2.setHeight((short) 400); // 设置行高

for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
row2 = this.createCell(row2, (short) i, headStyle, exportInfo
.getTableHead().get(i));
}
/** 表体 */
HSSFFont font = wb.createFont();
/** 设置字体样式 */
font.setFontName("宋体");
HSSFCellStyle cellStyle = wb.createCellStyle();
if (exportInfo.getCellDataFomat() != null
&& !"".equals(exportInfo.getCellDataFomat())) {
short stringFormat = HSSFDataFormat.getBuiltinFormat(exportInfo
.getCellDataFomat());
if (stringFormat != -1) {
cellStyle.setDataFormat(stringFormat);
}
}
cellStyle.setFont(font);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框

cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框

cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框

cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框

cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 居左

for (int i = 0; i < exportInfo.getRowList().size(); i++) {
cellList = (Vector) exportInfo.getRowList().get(i);
HSSFRow row3 = sheet.createRow((short) i + 2);
row3.setHeight((short) 300); // 设置行高
for (int j = 0; j < cellList.size(); j++) {
row3 = this.createCell(row3, (short) j, cellStyle, cellList
.get(j));
}
}

} catch (Exception ex) {
log.info("error while create work book sheet ", ex);
}

}

/**
* 创建 包含多个bookSheet 的 Execl 文件
*
* @param wb
*            HSSFWorkbook
* @param exportInfo
*            BaseDataExportInfo
*/
public void createMoreWorkBookSheet(BaseDataExportInfo exportInfo) {

if (exportInfo.getWorkbookFileName() != null)
workbookFileName = exportInfo.getWorkbookFileName() + ".xls";
try {

for (int n = 0; n < exportInfo.getRowList().size(); n++) {

// JOptionPane.showMessageDialog(null,"第" +(n+1)+ "分页!");

HSSFSheet sheet = wb.createSheet(n + "");
wb.setSheetName(n, exportInfo.getSheetName()+ " " + (n + 1));

/** 设置列宽 */
// 设置第二列和倒数第二类的宽度为7000,其它列宽度为4000
for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
if (i == 1 || i == exportInfo.getTableHead().size() - 1) {
sheet.setColumnWidth( i,  7000);
} else {
sheet.setColumnWidth( i,  4000);
}
}

/** 合并单元格 */
// 生成标题行, Region的四个参数分别对应 (x1,y1,x2,y2)
sheet.addMergedRegion(new Region(0, (short) 0, 0,
(short) (exportInfo.getTableHead().size() - 1)));

/** 表标题 */
HSSFRow row = sheet.createRow((short) 0);
row.setHeight((short) 500); // 设置行高

// 格式化表标题
HSSFFont titleFont = wb.createFont();
titleFont.setFontName("宋体");
titleFont.setFontHeightInPoints((short) 16);
titleFont.setBoldweight((short) 20);
HSSFCellStyle titleStyle = wb.createCellStyle();
titleStyle.setFont(titleFont);
titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER_SELECTION); // 居中

row = this.createCell(row, (short) 0, titleStyle, exportInfo
.getSheetTitle());

/** 表头 */
// 格式化表头
HSSFFont headFont = wb.createFont();
headFont.setFontName("宋体");
headFont.setFontHeightInPoints((short) 12);
headFont.setBoldweight((short) 20);

HSSFCellStyle headStyle = wb.createCellStyle();
headStyle.setFont(headFont);
headStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框

headStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框

headStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框

headStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框

headStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中

HSSFRow row2 = sheet.createRow((short) 1);
row2.setHeight((short) 400); // 设置行高

for (int i = 0; i < exportInfo.getTableHead().size(); i++) {
row2 = this.createCell(row2, (short) i, headStyle,
exportInfo.getTableHead().get(i));
}

/** 表体 */
// 格式化表体
HSSFFont font = wb.createFont();
font.setFontName("宋体");
HSSFCellStyle cellStyle = wb.createCellStyle();
if (exportInfo.getCellDataFomat() != null
&& !"".equals(exportInfo.getCellDataFomat())) {
short stringFormat = HSSFDataFormat
.getBuiltinFormat(exportInfo.getCellDataFomat());
if (stringFormat != -1) {
cellStyle.setDataFormat(stringFormat);
}
}
cellStyle.setFont(font);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框

cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); // 左边框

cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); // 右边框

cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); // 上边框

cellStyle.setAlignment(HSSFCellStyle.ALIGN_LEFT); // 居左

for (int i = 0; i < 98; i++) {
if (i < exportInfo.getRowList().size()) {
if ((i + n * 100) >= exportInfo.getRowList().size())
break;

Vector cellList = null;
cellList = (Vector) exportInfo.getRowList().get(
i + n * 100);
HSSFRow row3 = sheet.createRow((short) i + 2);
row3.setHeight((short) 300); // 设置行高
for (int j = 0; j < cellList.size(); j++) {
row3 = this.createCell(row3, (short) j, cellStyle,
cellList.get(j));
}

}
}

if ((100 * (n + 1) - 1) >= exportInfo.getRowList().size())
break;
}
} catch (Exception ex) {
log.info("error while create work book sheet ", ex);
}

}

/**
* 创建单元格
*
*
* @param row
*            HSSFRow
* @param cellIndex
*            short
* @param cellStyle
*            HSSFCellStyle
* @param cellValue
*            Object
* @return HSSFRow
*/
public HSSFRow createCell(HSSFRow row, int cellIndex,
HSSFCellStyle cellStyle, Object cellValue) {
HSSFCell cell = row.createCell( cellIndex);
try {
// cell.setEncoding(HSSFCell.ENCODING_UTF_16);
if (cellStyle != null) {
cell.setCellStyle(cellStyle);
}

if (cellValue == null) {
cell.setCellValue("");
} else if (cellValue instanceof Boolean) {
cell.setCellValue(((Boolean) cellValue).booleanValue());
} else if (cellValue instanceof String) {
cell.setCellValue((String.valueOf(cellValue)));
} else if (cellValue instanceof Date) {
cell.setCellValue((Date) cellValue);
} else {
cell.setCellValue("");
}

// log.info("this cell value is " + cellValue);
} catch (Exception ex) {
log.error("error while execut create cell ", ex);
}
return row;
}

/**
* 读取Excel 表
*
*
* @param aSheet
*            HSSFSheet
* @throws Exception
* @return List
*/
public List<Object> readWeekBookSheet(Sheet aSheet) throws Exception {
List<Object> rowList = new ArrayList<Object>();
Vector<String> rowVector = null;
int rowNum = 1;
int cellNum = 1;
int maxCellNum = aSheet.getRow(1).getLastCellNum();

// HSSFCellStyle cellStyle = wb.createCellStyle();
// short stringFormat = HSSFDataFormat.getBuiltinFormat("@"); //请参考HSSFDataFormat内置的数据类型,例如"@"代表文本
// cellStyle.setDataFormat(stringFormat);

for (int rowNumOfSheet = 2; rowNumOfSheet <= aSheet.getPhysicalNumberOfRows(); rowNumOfSheet++) {
rowNum = rowNumOfSheet;
if (null != aSheet.getRow(rowNumOfSheet))
{
Row aRow = aSheet.getRow(rowNumOfSheet);
rowVector = new Vector<String>();

// System.out.println("==============================="+aRow.getCell(2).getCellType());


for (short cellNumOfRow = 0; cellNumOfRow <= maxCellNum; cellNumOfRow++)
{
cellNum = cellNumOfRow;
if (null != aRow.getCell(cellNumOfRow))
{
Cell aCell = aRow.getCell(cellNumOfRow);
int cellType = aCell.getCellType();

switch (cellType) {
case HSSFCell.CELL_TYPE_NUMERIC: // 整形
if (HSSFDateUtil.isCellDateFormatted(aCell))
{
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
rowVector.add(cellNumOfRow, format.format(aCell.getDateCellValue()));
}
else
{
rowVector.add(cellNumOfRow, String
.valueOf(aCell.getNumericCellValue()));
}

break;
case HSSFCell.CELL_TYPE_STRING: // 字符串型
rowVector.add(cellNumOfRow, aCell
.getStringCellValue().trim());
break;
case HSSFCell.CELL_TYPE_FORMULA: // double 型

rowVector.add(cellNumOfRow, String.valueOf(aCell.getStringCellValue()));
break;
case HSSFCell.CELL_TYPE_BLANK: // 空字符

rowVector.add(cellNumOfRow, "");
break;
case HSSFCell.CELL_TYPE_BOOLEAN: // 布尔型

rowVector.add(cellNumOfRow, String
.valueOf(aCell.getBooleanCellValue()));
break;
default:
System.out.println("gggggggggggggggggggggggg"+cellType);
rowVector.add(cellNumOfRow, "");
}
}
else
{
rowVector.add(cellNumOfRow, "");
}
}


rowList.add(rowVector);
}
}
return rowList;
}

/**
* 写Execl 文件
*
* @param wb
*            HSSFWorkbook
* @param outPutStream
*            OutputStream
*/
public void writeWorkBook(HttpServletResponse response) {
try {

OutputStream outputStream = new BufferedOutputStream(response
.getOutputStream());
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("content-disposition", "attachment;filename=\""
+ new String(workbookFileName.getBytes(), response
.getCharacterEncoding()) + "\"");
wb.write(outputStream);
outputStream.close();
} catch (Exception ex) {
log.error("error while create work book ", ex);
}

}
/**
* 修改properties文件
* @param properties
* @param pathFile
*/
public static void modifyProperties(Properties properties,String pathFile)
{
    InputStream inputStream = null;
    OutputStream  fos = null;
        Properties tempProper = new Properties();
        File file = new File(pathFile);
        try
        {
            inputStream = new FileInputStream(file);
            tempProper.load(inputStream);
            fos = new FileOutputStream(file);
            tempProper.setProperty("userName", properties.getProperty("userName"));
            tempProper.setProperty("passwd", properties.getProperty("passwd"));
            tempProper.store(fos, null);
        }
        catch (IOException e)
            {
                System.err.println(e.getStackTrace());
            }
        finally
        {
            try
            {
                if(null != fos)
                {
                    fos.close();
                }
                if(null != inputStream)
                {
                    inputStream.close();
                }
            }
            catch (IOException e)
            {
                System.err.println(e.getStackTrace());
            }
        }
   
}

/**
* 读取Peoperties
* @param args
*/

/**
     * 得到属性文件实例
     */
    public static Properties getPropertiesByFile(String filePath)
    {
        InputStream inputStream = null;
        Properties properties = new Properties();
        try
        {
            File file = new File(filePath);
            inputStream = new FileInputStream(file);
            properties.load(inputStream);
        }
        catch (Exception e)
        {
            System.out.println(e.getMessage());
        }
        finally
        {
            try
            {
                inputStream.close();
            }
            catch (IOException e)
            {
            System.out.println(e.getMessage());
            }
        }
        return properties;
    }

public static void main(String[] args)
{
//需要导入poi-bin-3.8-20120326.zip包
ProcessXSL xsl =new ProcessXSL();
Workbook workBook = null;
try {
        try {
workBook = new XSSFWorkbook(new FileInputStream("d:/资源池人员跟踪_20120911.xlsx")); // 支持2007
} catch (Exception ex) {
workBook = new HSSFWorkbook(new FileInputStream(
"d:/资源池人员跟踪_20120911.xlsx")); // 支持2003及以前
}
Sheet aSheet = workBook.getSheetAt(0);
List<Object> list = xsl.readWeekBookSheet(aSheet);
System.out.println("====================================="
+ list.size());
for (Object object : list)
{
System.out.println(object);
}
}
catch (Exception e1)
{
e1.printStackTrace();

}
}
分享到:
评论

相关推荐

    java操作Execl文件

    - 版本兼容性:jxl库主要针对旧版Excel(.xls),对于.xlsx(Excel 2007及以上版本)文件,可能需要使用Apache POI库。 总的来说,通过使用jxl库,Java开发者可以方便地实现对Excel文件的各种操作,满足各种业务...

    poi导入execl 所有jar包

    对于Excel,它主要使用HSSF(Horizontally Stored Sheet Format)来处理.xls文件(Excel 97-2003格式),而XSSF(XML Spreadsheet Format)则用于处理.xlsx文件(Excel 2007及更高版本)。 2. **所需JAR包**: - `...

    Java导出Execl疑难点处理的实现

    HSSFWorkbook适用于处理Excel 2003之前的版本(.xls),而XSSFWorkbook则是针对Excel 2007及以后版本(.xlsx)的。在处理自定义单元格背景颜色时,HSSFWorkbook的实现相对复杂,因此建议使用XSSFWorkbook,它提供了...

    导出execl文件

    Excel文件因其灵活性、丰富的格式支持以及与多种应用程序的良好兼容性而广受欢迎。本篇文章将详细探讨如何使用Java来实现Excel文件的导出。 首先,我们需要一个库来处理Excel文件。Apache POI是一个广泛使用的开源...

    java导出execl所需jar包

    使用Apache POI进行Java导出Excel时,需要注意文件的读写操作必须在合适的生命周期内完成,避免内存泄漏。同时,由于Excel文件结构复杂,处理时可能出现各种异常,需要做好异常处理。 在实际开发中,你可以结合...

    java 导出excel,带图片的Excel导出

    在实际开发中,还需要考虑错误处理、性能优化、兼容性等问题。通过上述步骤,你可以创建一个能处理带图片的Excel导出的Java程序,适用于各种业务场景。当然,具体的实现代码会涉及更多的细节和具体操作,但以上知识...

    java导入导出Execl表格数据jar包及依赖包

    7. **错误处理**: 在读写过程中,需要捕获并处理可能出现的异常,如文件不存在、格式不正确、权限问题等。良好的错误处理机制能提高程序的健壮性。 8. **版本兼容性**: 不同版本的Excel文件格式可能略有不同,需要...

    兼容office2007的生成和读取jar包

    总之,“兼容office2007的生成和读取jar包”提供了一种Java编程环境下处理XLSX文件的解决方案,通过引入和使用Execl.jar,开发者可以方便地在Java程序中创建、读取和修改Excel 2007及更高版本的文件。

    execl依赖包

    总的来说,“execl依赖包”是开发中不可或缺的工具,能够帮助我们轻松地与Excel文件进行交互。正确选择和使用这些包,能够提高开发效率,同时确保数据导出的准确性和稳定性。在导入这些依赖包后,根据项目的具体需求...

    Java中Excel转图片工具包(纯java)

    Excel文件本身并不直接支持转换为图片格式,但可以通过转换为PDF,然后再将PDF转换为图片的方式来间接实现。这是因为PDF能精确地保留原始Excel的样式和布局,而许多库已经实现了从PDF到图片的转换。 该工具包的核心...

    POI操作Execl相关JAR包

    这个“POI操作Excel相关JAR包”是针对3.7版本的,它兼容Excel2003(.xls格式)和Excel2007(.xlsx格式)。 1. **POI框架介绍**: POI项目由Apache软件基金会维护,最初由Gnumeric项目开发,用于读取和写入...

    execl解决方案比较

    - **兼容支持**:支持Excel 97-2003和OpenOffice,但不支持新的Excel 2007 .xlsx OOXML文件格式。 - **开发难度**:较高。 - **部署难度**:无特殊要求。 - **备注**:基于POI 3.2版本。 Jxls是基于POI的一个扩展...

    Android将数据导出为excel文件的方法

    10. **兼容性测试**:确保导出的Excel文件能在不同的设备和Excel版本中正确打开和显示。 以上就是Android应用将数据导出到Excel文件的基本步骤和关键知识点。需要注意的是,实际项目中可能会遇到各种问题,如权限、...

    js 读取execl数据内容

    在JavaScript(简称JS)环境中,读取Excel数据内容通常涉及到使用一些特定的库或插件,因为原生的JS并不支持直接操作二进制文件如Excel(.xlsx或.xls)格式。在给定的场景中,提到的是一个名为"jqueryExcel"的插件,...

    使用jsp下载excel文件

    - `java.io.File`:提供对文件或目录路径名的操作。 - `java.io.FileInputStream`:用于从文件系统中的某个文件中获取字节输入流。 - `javax.servlet.ServletOutputStream`:Servlet 容器提供的输出流,用于向...

    execl导出工具类

    在Java开发中,经常需要处理Excel文件的导入与导出工作。本篇文章介绍一个简单易用的Excel导出工具类——`ExcelUtil`,该工具类能够帮助开发者快速实现Excel文件的导出功能。 根据给定的文件信息,“这是一个Excel...

    java\androi-poi3.8下载

    总的来说,Java Android POI 3.8是Android开发中处理Excel文件不可或缺的工具,尤其对于那些需要从服务器获取数据并以Excel格式展示,或者需要用户在移动设备上填写和保存Excel表格的应用来说,它提供了强大的功能和...

    报表导成出Excel

    7. **兼容性问题:** - 考虑到不同浏览器的兼容性,可能需要使用`FileSaver.js`这样的库来处理文件保存。 通过以上方法,你可以实现Echarts报表数据到Excel的导出。这个过程涉及到前端交互设计、数据处理、文件...

    多种语言操作excel的类库libxl3.8

    10. **版本更新**:“3.8”版本可能包括了对新Excel文件格式的支持、性能提升和其他改进,确保与最新Excel版本兼容。 通过libxl3.8,开发者可以轻松地在各种项目中实现高效、可靠的Excel文件操作,无论是在数据分析...

    android excel poi+jxl

    在Android环境下使用Apache POI需要解决几个挑战,因为Android系统默认不包含对Java API的全面支持,特别是那些与二进制流和文件操作相关的部分。这通常需要借助像Android-POI这样的适配器库来实现。 以下是使用...

Global site tag (gtag.js) - Google Analytics