java导出excel,excel打不开,报文件格式无效,怎么解决!

java导出excel,excel打不开,报文件格式无效,怎么解决!,第1张

两个原因:

1.你的excel模版本身有问题,可以尝试新建一个模版。

2.你的excel使用了一些POI不支持的函数。

解决办法:

另存是由excel重写了完整的文件,可以解决问题。

关闭文件例子:

FileOutputStream os = new FileOutputStream("workbook.xls")

wb.write(os)

os.close()

在保护状态下execl的格式有可能正在被使用,你这边修改,准确说是线程冲桥空纳突,一般excel值会作为导出文件的模板,是不会编辑的。你可以在读的时候判断execl是否正在被使用。

下面亏前的代码问题,你可以参考

package com.hwt.glmf.common

import java.io.IOException

import java.io.OutputStream

import java.util.ArrayList

import java.util.List

import javax.servlet.http.HttpServletResponse

import org.apache.poi.hssf.usermodel.HSSFCell

import org.apache.poi.hssf.usermodel.HSSFCellStyle

import org.apache.poi.hssf.usermodel.HSSFFont

import org.apache.poi.hssf.usermodel.HSSFRichTextString

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.CellRangeAddress

import org.apache.poi.hssf.util.HSSFColor

/**

* 导出Excel公共方法

* @version 1.0

*

* @author wangcp

*

*/

public class ExportExcel extends BaseAction {

//显示的导出表的标题

private String title

//导出表的列名

private String[] rowName

private List<Object[]>dataList = new ArrayList<Object[]>()

HttpServletResponse response

//构造方法,传入要导出的数据

public ExportExcel(String title,String[] rowName,List<Object[]>dataList){

this.dataList = dataList

this.rowName = rowName

this.title = title

}

/*

* 导出数据

* */

public void export() throws Exception{

try{

HSSFWorkbook workbook = new HSSFWorkbook()// 创建工作簿对象

HSSFSheet sheet = workbook.createSheet(title)// 创建工作表

// 产生表格标题行

HSSFRow rowm = sheet.createRow(0)

HSSFCell cellTiltle = rowm.createCell(0)

//sheet样式定义【getColumnTopStyle()/getStyle()均为自定义方法 - 在下面 - 可扩展】

HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook)/敏没/获取列头样式对象

HSSFCellStyle style = this.getStyle(workbook)//单元格样式对象

sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length-1)))

cellTiltle.setCellStyle(columnTopStyle)

cellTiltle.setCellValue(title)

// 定义所需列数

int columnNum = rowName.length

HSSFRow rowRowName = sheet.createRow(2)// 在索引2的位置创建行(最顶端的行开始的第二行)

// 将列头设置到sheet的单元格中

for(int n=0n<columnNumn++){

HSSFCell cellRowName = rowRowName.createCell(n)//创建列头对应个数的单元格

cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING)//设置列头单元格的数据类型

HSSFRichTextString text = new HSSFRichTextString(rowName[n])

cellRowName.setCellValue(text)//设置列头单元格的值

cellRowName.setCellStyle(columnTopStyle)//设置列头单元格样式

}

是不是在 vista 或 Windows 7 下运行,如果是这样用核高管理员身份运行试行锋试。改带尺

FileOutputStream fileOut = new FileOutputStream(outFileName)

wb.write(fileOut)

fileOut.close()//是不是没写这句?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/12206052.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存