① POI生成excel问题
XSSF不能读取Excel2003以前(包括2003)的版本,没需要就按你之前的继续,如果在读取前判断文件是2003前的版本还是2007的版本,提供个思路。XSSF和HSSF虽然在不同的包里,但却引用了同一接口Workbook,Workbook book = null;try {book = new XSSFWorkbook(excelFile);} catch (Exception ex) {book = new HSSFWorkbook(new FileInputStream(excelFile));}各版本的Excel中测试,没有发生异常
② 如何使用java POI生成Excel表文件
private static void WriteExcel2010() throws IOException { String path="C:\\poi2.xlsx"; XSSFWorkbook workbook=new XSSFWorkbook(); XSSFSheet sheet=workbook.createSheet("我的Sheet"); XSSFRow row=sheet.createRow(0); XSSFCell cell=row.createCell(0); cell.setCellValue("我是POI写入的"); XSSFRow row1=sheet.createRow(1); XSSFCell cell1=row1.createCell(0); cell1.setCellValue("2010"); FileOutputStream outputStream=new FileOutputStream(path); workbook.write(outputStream); outputStream.close(); } private static void WriteExcel2003() throws IOException { String path="C:\\poi2.xls"; HSSFWorkbook workbook=new HSSFWorkbook(); HSSFSheet sheet=workbook.createSheet("我的Excel"); HSSFRow row=sheet.createRow(0); HSSFCell cell=row.createCell(0); cell.setCellValue("我是POI写入的"); FileOutputStream outputStream=new FileOutputStream(path); workbook.write(outputStream); outputStream.close(); }
③ poi如何通过模板导出excel
共分为六部完成根据模板导出excel操作:第一步、设置excel模板路径(setSrcPath)第二步、设置要生成excel文件路径(setDesPath)第三步、设置模板中哪个Sheet列(setSheetName)第四步、获取所读取excel模板的对象(getSheet)第五步、设置数据(分为6种类型数据:setCellStrValue、setCellDateValue、 setCellDoubleValue、setCellBoolValue、setCellCalendarValue、setCellRichTextStrValue)第六步、完成导出 (exportToNewFile)
④ java用poi导出excel文件,打开导出的文件时报错,怎么办
两个原因:
1.你的excel模版本身有问题,可以尝试新建一个模版。
2.你的excel使用了一些POI不支持的函数。
解决办法:
另存是由excel重写了完整的文件,可以解决问题。
关闭文件例子:
FileOutputStream os = new FileOutputStream("workbook.xls");
wb.write(os);
os.close();
⑤ javaweb中通过POI生成Excel并弹出下载窗口!
把response的输出类型设置成 response.setContentType("application/x-download response.addHeader("Content-Disposition","attachment;filename=myexcel.xls" ); POI结果直接给response的输出流,就可以了
⑥ java poi导出excel
用spire.xls.jar也可以导出excel,代码更简单
import com.spire.xls.ExcelVersion;
import com.spire.xls.Workbook;
import com.spire.xls.Worksheet;
public class InsertArray {
public static void main(String[] args) {
//创建Workbook对象
Workbook wb = new Workbook();
//获取第一张工作表
Worksheet sheet = wb.getWorksheets().get(0);
//定义一维数据
String[] oneDimensionalArray = new String[]{"苹果", "梨子", "葡萄", "香蕉"};
//将数组从指定单个格开始写入工作表,true表示纵向写入,设置为false为横向写入
sheet.insertArray(oneDimensionalArray, 1, 1, true);
//定义二维数组
String[][] twoDimensionalArray = new String[][]{
{"姓名", "年龄", "性别", "学历"},
{"小张", "25", "男", "本科"},
{"小王", "24", "男", "本科"},
{"小李", "26", "女", "本科"}
};
//从指定单元格开始写入二维数组到工作表
sheet.insertArray(twoDimensionalArray, 1, 3);
//保存文档
wb.saveToFile("InsertArrays.xlsx", ExcelVersion.Version2016);
}
}
⑦ JAVA 使用POI导出EXCEL文件,但是数据中有特殊字符该如何正确导出
在保护状态下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=0;n<columnNum;n++){HSSFCell cellRowName = rowRowName.createCell(n); //创建列头对应个数的单元格cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING); //设置列头单元格的数据类型HSSFRichTextString text = new HSSFRichTextString(rowName[n]);cellRowName.setCellValue(text); //设置列头单元格的值cellRowName.setCellStyle(columnTopStyle); //设置列头单元格样式}//将查询出的数据设置到sheet对应的单元格中for(int i=0;i<dataList.size();i++){Object[] obj = dataList.get(i);//遍历每个对象HSSFRow row = sheet.createRow(i+3);//创建所需的行数for(int j=0; j<obj.length; j++){HSSFCell cell = null; //设置单元格的数据类型if(j == 0){cell = row.createCell(j,HSSFCell.CELL_TYPE_NUMERIC);cell.setCellValue(i+1);}else{cell = row.createCell(j,HSSFCell.CELL_TYPE_STRING);if(!"".equals(obj[j]) && obj[j] != null){cell.setCellValue(obj[j].toString()); //设置单元格的值}}cell.setCellStyle(style); //设置单元格样式}}//让列宽随着导出的列长自动适应for (int colNum = 0; colNum < columnNum; colNum++) {int columnWidth = sheet.getColumnWidth(colNum) / 256;for (int rowNum = 0; rowNum < sheet.getLastRowNum(); rowNum++) {HSSFRow currentRow;//当前行未被使用过if (sheet.getRow(rowNum) == null) {currentRow = sheet.createRow(rowNum);} else {currentRow = sheet.getRow(rowNum);}if (currentRow.getCell(colNum) != null) {HSSFCell currentCell = currentRow.getCell(colNum);if (currentCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {int length = currentCell.getStringCellValue().getBytes().length;if (columnWidth < length) {columnWidth = length;}}}}if(colNum == 0){sheet.setColumnWidth(colNum, (columnWidth-2) * 256);}else{sheet.setColumnWidth(colNum, (columnWidth+4) * 256);}}if(workbook !=null){try{String fileName = "Excel-" + String.valueOf(System.currentTimeMillis()).substring(4, 13) + ".xls";String headStr = "attachment; filename=\"" + fileName + "\"";response = getResponse();response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition", headStr);OutputStream out = response.getOutputStream();workbook.write(out);}catch (IOException e){e.printStackTrace();}}}catch(Exception e){e.printStackTrace();}}/** 列头单元格样式*/public HSSFCellStyle getColumnTopStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();//设置字体大小font.setFontHeightInPoints((short)11);//字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体名字font.setFontName("Courier New");//设置样式;HSSFCellStyle style = workbook.createCellStyle();//设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置底边框颜色;style.setBottomBorderColor(HSSFColor.BLACK.index);//设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框颜色;style.setLeftBorderColor(HSSFColor.BLACK.index);//设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框颜色;style.setRightBorderColor(HSSFColor.BLACK.index);//设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置顶边框颜色;style.setTopBorderColor(HSSFColor.BLACK.index);//在样式用应用设置的字体;style.setFont(font);//设置自动换行;style.setWrapText(false);//设置水平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}/** 列数据信息单元格样式*/public HSSFCellStyle getStyle(HSSFWorkbook workbook) {// 设置字体HSSFFont font = workbook.createFont();//设置字体大小//font.setFontHeightInPoints((short)10);//字体加粗//font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//设置字体名字font.setFontName("Courier New");//设置样式;HSSFCellStyle style = workbook.createCellStyle();//设置底边框;style.setBorderBottom(HSSFCellStyle.BORDER_THIN);//设置底边框颜色;style.setBottomBorderColor(HSSFColor.BLACK.index);//设置左边框;style.setBorderLeft(HSSFCellStyle.BORDER_THIN);//设置左边框颜色;style.setLeftBorderColor(HSSFColor.BLACK.index);//设置右边框;style.setBorderRight(HSSFCellStyle.BORDER_THIN);//设置右边框颜色;style.setRightBorderColor(HSSFColor.BLACK.index);//设置顶边框;style.setBorderTop(HSSFCellStyle.BORDER_THIN);//设置顶边框颜色;style.setTopBorderColor(HSSFColor.BLACK.index);//在样式用应用设置的字体;style.setFont(font);//设置自动换行;style.setWrapText(false);//设置水平对齐的样式为居中对齐;style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置垂直对齐的样式为居中对齐;style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);return style;}}
⑧ 急!!!java用poi导出excel文件,打开导出的文件时报错“文件错误,数据可能丢失”
用java写完文件后需要关闭文件流,如果不关闭就会报这个错。因为你的文件内容写完了,所以内容没有缺失,但excel检测到文件没有正常结束,所以报错。另存是由excel重写了完整的文件,所以可以解决问题。关闭文件例子:FileOutputStream os = new FileOutputStream("workbook.xls");wb.write(os);os.close();
⑨ java poi 在服务器生成excel文件
报格式错误是因为你没有填充EXCEL的内容。正确的做法是:1, HSSFWorkbook ws = new HSSFWorkbook();//建立新HSSFWorkbook对象2, Sheet sheet = workbook.createSheet(0); //建立一个新的sheet3,Row row = sheet.createRow(1); //建立一个新的row对象4, Cell cell = row.createCell(0); //在row上创建方格即列, cell.setCellValue(cellValue); //设置这个行中列的值 cell.setCellStyle(cellStyle); //设置样式
未经允许不得转载:山九号 » poi生成excel流文件|JAVA 使用POI导出EXCEL文件但是数据中有特殊字符该如何正确导出