当前位置: 首页 > 常见问题 > Excel表格

java字节转excel文件,java将树形数据导出excel

  • Excel表格
  • 2023-09-03

java字节转excel文件?2、设置导出excel路径 //导出的文件路径 String filePath="D:\\excel.xls"; 1 2 3、创建excel文件 //创建Excel文件(Workbook) HSSFWorkbook workbook = new HSSFWorkbook(); 1 2 4、那么,java字节转excel文件?一起来了解一下吧。

JAVA实现导出Excel功能

在编程中经常需要使用正肆到表格(报表)的处理主要以Excel表格为主。下面给出用java写入数据到excel表格方法:

1.添加jar文件

java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows,即使运行在Linux下,它同样能够正确的处理Excel文件。地址:http://www.andykhan.com/jexcelapi/

2.jxl对Excel表格的认识

可以参见http://www.cnblogs.com/xudong-bupt/archive/2013/03/19/2969997.html

3.java代码根据程序中的数据生成上述图片所示的t.xls文件

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

import java.io.File;

import jxl.*;

import jxl.write.Label;

import jxl.write.WritableSheet;

import jxl.write.WritableWorkbook;

public class Writer_excel{

public static void main(String[] args) {

//标题行

String title[]={"角色","编号","功能毕州名称","功能描述"};

//内容

String context[][]={{"UC11","设置课程","创建课程"},

{"UC12","设置学生名单","给出与课程关联的学生名单"},

{"UC21","查看学生名单",""},

{"UC22","查看小组信息","显示助教所负责的小组列表信息"}

};

//操作执行

try {

//t.xls为要新建的文件名

WritableWorkbook book= Workbook.createWorkbook(new File("t.xls"));

//生成名为“第一页”的工作表,参数0表示这是第一页

WritableSheet sheet=book.createSheet("第一页"举数轿,0);

//写入内容

for(int i=0;i<4;i++)//title

sheet.addCell(new Label(i,0,title[i]));

for(int i=0;i<4;i++)//context

{

for(int j=0;j<3;j++)

{

sheet.addCell(new Label(j+1,i+1,context[i][j]));

}

}

sheet.addCell(new Label(0,1,"教师"));

sheet.addCell(new Label(0,3,"助教"));

/*合并单元格.合并既可以是横向的,也可以是纵向的

*WritableSheet.mergeCells(int m,int n,int p,int q); 表示由(m,n)到(p,q)的单元格组成的矩形区域合并

* */

sheet.mergeCells(0,1,0,2);

sheet.mergeCells(0,3,0,4);

//写入数据

book.write();

//关闭文件

book.close();

}

catch(Exception e) { }

}

java将byte转成string

Excel的两种导出入门方法(JAVA与JS)

最近在做一个小项目作为练手,其中使用到了导出到Excel表格,一开始做的是使用JAVA的POI导出的,但因为我的数据是爬虫爬出来的,数据暂时并不保存在数据库或后台,所以直接显示在HTML的table,需要时又要将数据传回后台然后生成Excel文件,最后再从服务器到本地,过程几度经过铅大网络传输,感觉比较耗时与浪费性能,于是想着在HTML中的Table直接导到Excel中节约资源

JAVA导出EXCEL(.xls)

导出Excel用的插件是apache的poi.jar,maven地址如下

org.apache.poi

poi

3.17

1. 简单应用

先来个简化无样式的Excel导出,由于我的数据存在JSON中,所以形参是JSONArray,朋友们根据自己的实手睁际数据类型(Map,List,Set等)传入即可 ,代码如下

/**

* 创槐薯竖建excel并填入数据

* @author LiQuanhui

* @date 2017年11月24日 下午5:25:13

* @param head 数据头

* @param body 主体数据

* @return HSSFWorkbook

*/

public static HSSFWorkbook expExcel(JSONArray head, JSONArray body) {//创建一个excel工作簿

HSSFWorkbook workbook = new HSSFWorkbook();//创建一个sheet工作表

HSSFSheet sheet = workbook.createSheet("学生信息");

//创建第0行表头,再在这行里在创建单元格,并赋值

HSSFRow row = sheet.createRow(0);

HSSFCell cell = null;for (int i = 0; i < head.size(); i++) {

cell = row.createCell(i);

cell.setCellValue(head.getString(i));//设置值

}

//将主体数据填入Excel中

for (int i = 0, isize = body.size(); i < isize; i++) {

row = sheet.createRow(i + 1);

JSONArray stuInfo = body.getJSONArray(i);for (int j = 0, jsize = stuInfo.size(); j < jsize; j++) {

cell = row.createCell(j);

cell.setCellValue(stuInfo.getString(j));//设置值

}

}return workbook;

}

创建好Excel对象并填好值后(就是得到workbook),就是将这个对象以文件流的形式输出到本地上去,代码如下

/**

* 文件输出

* @author LiQuanhui

* @date 2017年11月24日 下午5:26:23

* @param workbook 填充好的workbook

* @param path 存放的位置

*/

public static void outFile(HSSFWorkbook workbook,String path) {

OutputStream os=null;try {

os = new FileOutputStream(new File(path));

workbook.write(os);

} catch (FileNotFoundException e1) {

e1.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}try {

os.close();

} catch (IOException e) {

e.printStackTrace();

}

}

至此Excel的导出其实已经做完了。

java将输出结果写入excel

excel类

package com.ohd.ie.product.action;

import java.awt.image.BufferedImage;

import java.io.*;

import javax.imageio.ImageIO;

import org.apache.commons.io.output.ByteArrayOutputStream;

import jxl.Workbook;

import jxl.format.Alignment;

import jxl.format.VerticalAlignment;

import jxl.write.*;

import jxl.write.Number;

import jxl.write.biff.RowsExceededException;

public class Excel {

private OutputStream os;

private WritableWorkbook wwb = null;

private WritableSheet ws = null;

private WritableCellFormat titleCellFormat = null;

private WritableCellFormat noBorderCellFormat = null;

private WritableCellFormat hasBorderCellFormat = null;

private WritableCellFormat hasBorderCellNumberFormat = null;

private WritableCellFormat hasBorderCellNumberFormat2 = null;

private WritableImage writableImage=null;

private int r;

public Excel(OutputStream os){

this.os = os;

r = -1;

try {

wwb = Workbook.createWorkbook(os);

//创建工作表

ws = wwb.createSheet("sheet1",0);

//设置表头字体,大小,加粗

titleCellFormat = new WritableCellFormat();

titleCellFormat.setAlignment(Alignment.CENTRE);

titleCellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

//自动换行

titleCellFormat.setWrap(true);

titleCellFormat.setFont(new WritableFont(WritableFont.createFont("宋体"),12,WritableFont.BOLD));

titleCellFormat.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);

//设置表格字体拿如,大小----无边框

noBorderCellFormat = new WritableCellFormat();

noBorderCellFormat.setAlignment(Alignment.CENTRE);

noBorderCellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

noBorderCellFormat.setFont(new WritableFont(WritableFont.createFont("宋消告启体"友态),12));

//设置表格字体,大小----有边框

hasBorderCellFormat = new WritableCellFormat();

hasBorderCellFormat.setAlignment(Alignment.CENTRE);

hasBorderCellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

hasBorderCellFormat.setFont(new WritableFont(WritableFont.createFont("宋体"),12));

hasBorderCellFormat.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);

//设置表格字体,大小----有边框(小数)

NumberFormat nf = new NumberFormat("#0.00");

hasBorderCellNumberFormat = new WritableCellFormat(nf);

hasBorderCellNumberFormat.setAlignment(Alignment.CENTRE);

hasBorderCellNumberFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

hasBorderCellNumberFormat.setFont(new WritableFont(WritableFont.createFont("宋体"),12));

hasBorderCellNumberFormat.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);

//设置表格字体,大小----有边框(整数)

NumberFormat nf2 = new NumberFormat("#0");

hasBorderCellNumberFormat2 = new WritableCellFormat(nf2);

hasBorderCellNumberFormat2.setAlignment(Alignment.CENTRE);

hasBorderCellNumberFormat2.setVerticalAlignment(VerticalAlignment.CENTRE);

hasBorderCellNumberFormat2.setFont(new WritableFont(WritableFont.createFont("宋体"),12));

hasBorderCellNumberFormat2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

/**

*

* @param content 内容

* @param c 列

* @param style 样式

* @param isNewLine 是否换行

* @param mergeType 合并类型

* @param mergeCount 合并个数

* @param width 单元格宽

*/

public void setExcelCell(String content,int c,int style,boolean isNewLine,int mergeType,int mergeCount,int width){

try {

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////报表内容////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

if(isNewLine){

r++;

}

WritableCell l = null;

if(style == 1){

l = new Label(c,r,content,titleCellFormat);

}

else if(style == 2){

l = new Label(c,r,content,noBorderCellFormat);

}

else if(style == 3){

l = new Label(c,r,content,hasBorderCellFormat);

}

else if(style == 4){

l = new Number(c,r,Double.parseDouble(content),hasBorderCellNumberFormat);

}

else if(style == 5){

l = new Number(c,r,Integer.parseInt(content),hasBorderCellNumberFormat2);

}

ws.addCell(l);

if(width != 0){

ws.setColumnView(c,width);

}

//veryhuo,com

if(mergeType == 1){

//x 轴方向

ws.mergeCells(c, r, c+mergeCount-1 , r);

}

else if(mergeType == 2){

//y 轴方向

ws.mergeCells(c, r, c, r+mergeCount-1);

}

if(isNewLine){

ws.setRowView(r, 350);

if(style == 1 && r != 0){

ws.setRowView(r, 900);

}

else{

ws.setRowView(r, 350);

}

}

//

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

} catch (Exception e) {

System.out.println(e.toString());

}

}

public void setExcelCellEx(String content,int c,int style,boolean isNewLine,int mergeType,int mergeCount,int width,int row){

try {

////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////报表内容////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////

if(isNewLine){

r++;

}

WritableCell l = null;

if(style == 1){

l = new Label(c,r,content,titleCellFormat);

}

else if(style == 2){

l = new Label(c,r,content,noBorderCellFormat);

}

else if(style == 3){

if(content.indexOf(".jpg")!=-1 ||content.indexOf(".JPG")!=-1){

File outputFile=null;

File imgFile =new File(content);

if(imgFile.exists()&&imgFile.length()>0){

BufferedImage input=null;

try {

input = ImageIO.read(imgFile);

} catch (Exception e) {

e.printStackTrace();

}

if(input!=null){

String path=imgFile.getAbsolutePath();

outputFile = new File(path.substring(0,path.lastIndexOf('.')+1)+"png");

ImageIO.write(input, "PNG", outputFile);

if(outputFile.exists()&&outputFile.length()>0){

ws.setRowView(row,2000);

//ws.setColumnView(8, 10);

writableImage = new WritableImage(c+0.1, row+0.1, 0.8, 0.8, outputFile);

ws.addImage(writableImage);

l = new Label(c,r,"",hasBorderCellFormat);

}

}

}

}else{

l = new Label(c,r,content,hasBorderCellFormat);

}

}

else if(style == 4){

l = new Number(c,r,Double.parseDouble(content),hasBorderCellNumberFormat);

}

else if(style == 5){

l = new Number(c,r,Integer.parseInt(content),hasBorderCellNumberFormat2);

}

ws.addCell(l);

if(width != 0){

ws.setColumnView(c,width);

}

if(mergeType == 1){

//x 轴方向

ws.mergeCells(c, r, c+mergeCount-1 , r);

}

else if(mergeType == 2){

//y 轴方向

ws.mergeCells(c, r, c, r+mergeCount-1);

}

if(isNewLine){

ws.setRowView(r, 350);

if(style == 1 && r != 0){

ws.setRowView(r, 900);

}

else{

ws.setRowView(r, 350);

}

}

} catch (Exception e) {

System.out.println(e.toString());

}

}

public void setRowHeight(int val){

try {

ws.setRowView(r, val);

} catch (RowsExceededException e) {

e.printStackTrace();

}

}

public void getExcelResult(){

try {

wwb.write();

} catch (Exception e) {

System.out.println(e.toString());

}

finally{

if(wwb != null){

try {

wwb.close();

if(os != null){

os.close();

}

} catch (WriteException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

需要的jar包:jxl.jar

java导出excel的几种方式

package common.util;

import jxl.*;

import jxl.format.UnderlineStyle;

import jxl.write.*;

import jxl.write.Number;

import jxl.write.Boolean;

import java.io.*;

/**

* Created by IntelliJ IDEA.

* User: xl

* Date: 2005-7-17

* Time: 9:33:22

* To change this template use File | Settings | File Templates.

*/

public class ExcelHandle

{

public ExcelHandle()

{

}

/**

* 读取Excel

*

* @param filePath

*/

public static void readExcel(String filePath)

{

try

{

InputStream is = new FileInputStream(filePath);

Workbook rwb = Workbook.getWorkbook(is);

//Sheet st = rwb.getSheet("0")这里有两种方法碰此仿获取sheet表,1为名字,而为下标,从扒信0开始

Sheet st = rwb.getSheet("original");

Cell c00 = st.getCell(0,0);

//通用的获取cell值的方式,返回字符串

String strc00 = c00.getContents();

//获得cell具体类型值的方式

if(c00.getType() == CellType.LABEL)

{

LabelCell labelc00 = (LabelCell)c00;

strc00 = labelc00.getString();

}

//输出

System.out.println(strc00);

//关闭

rwb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

/**

* 输出Excel

*

* @param os

*/

public static void writeExcel(OutputStream os)

{

try

{

/**

* 只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,

* 因为类WritableWorkbook的构造函数为protected类型

* method(1)直接从目标文件中读取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));

* method(2)如下实例所示 将WritableWorkbook直接写入到输出流

*/

WritableWorkbook wwb = Workbook.createWorkbook(os);

//创建Excel工作笑纤表 指定名称和位置

WritableSheet ws = wwb.createSheet("Test Sheet 1",0);

//**************往工作表中添加数据*****************

//1.添加Label对象

Label label = new Label(0,0,"this is a label test");

ws.addCell(label);

//添加带有字型Formatting对象

WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);

WritableCellFormat wcf = new WritableCellFormat(wf);

Label labelcf = new Label(1,0,"this is a label test",wcf);

ws.addCell(labelcf);

//添加带有字体颜色的Formatting对象

WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,

UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);

WritableCellFormat wcfFC = new WritableCellFormat(wfc);

Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC);

ws.addCell(labelCF);

//2.添加Number对象

Number labelN = new Number(0,1,3.1415926);

ws.addCell(labelN);

//添加带有formatting的Number对象

NumberFormat nf = new NumberFormat("#.##");

WritableCellFormat wcfN = new WritableCellFormat(nf);

Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);

ws.addCell(labelNF);

//3.添加Boolean对象

Boolean labelB = new jxl.write.Boolean(0,2,false);

ws.addCell(labelB);

//4.添加DateTime对象

jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date());

ws.addCell(labelDT);

//添加带有formatting的DateFormat对象

DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");

WritableCellFormat wcfDF = new WritableCellFormat(df);

DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);

ws.addCell(labelDTF);

//添加图片对象,jxl只支持png格式图片

File image = new File("f:\\2.png");

WritableImage wimage = new WritableImage(0,1,2,2,image);

ws.addImage(wimage);

//写入工作表

wwb.write();

wwb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

/**

* 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象

* 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,

* 以使单元格的内容以不同的形式表现

* @param file1

* @param file2

*/

public static void modifyExcel(File file1,File file2)

{

try

{

Workbook rwb = Workbook.getWorkbook(file1);

WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy

WritableSheet ws = wwb.getSheet(0);

WritableCell wc = ws.getWritableCell(0,0);

//判断单元格的类型,做出相应的转换

if(wc.getType == CellType.LABEL)

{

Label label = (Label)wc;

label.setString("The value has been modified");

}

wwb.write();

wwb.close();

rwb.close();

}

catch(Exception e)

{

e.printStackTrace();

}

}

//测试

public static void main(String[] args)

{

try

{

//读Excel

ExcelHandle.readExcel("f:/testRead.xls");

//输出Excel

File fileWrite = new File("f:/testWrite.xls");

fileWrite.createNewFile();

OutputStream os = new FileOutputStream(fileWrite);

ExcelHandle.writeExcel(os);

//修改Excel

ExcelHandle.modifyExcel(new file(""),new File(""));

}

catch(Exception e)

{

e.printStackTrace();

}

}

}

文本文档怎么变成java文件

热门频道

首页

博客

研修院

VIP

APP

问答

社区

推荐频道

活动

招聘

专题

打开CSDN APP

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

打开APP

大数据导出败租excel大小限制_java 导出Excel 大数据量,自己经验总结! 原创

2020-12-19 01:58:16

weixin_39655377

码龄5年

关注

分析导出简腔实现代码,XLSX支持:

/*** 生成XLSX,2007版本的excel,每个sheet无6.5W的行数限制,但是到了一定数量,可能内存溢出,

* 次方法适合在预计10W以下的数据导出时使用,本机测试,14W可以导出。列数量在8列左右

*

*@paramfileOut

* 输出流

*@paramsheetMap

* 要设置的数据信息

*@throwsSQLException*/

public static voidcreateXSLXByResultSet(OutputStream fileOut, WriteXLSBean... beans)throwsSQLException {try{//重点 Workbook

Workbook wb = newXSSFWorkbook();for (int i = 0, len = beans.length; i < len; i++) {

WriteXLSBean xlsBean=beans[i];

Sheet sheet=wb.createSheet(xlsBean.getSheetName());

ResultSet rs=xlsBean.getRs();

ResultSetMetaData rsmd=rs.getMetaData();

TypeHandlerRegistry tr=BeanContext.tr;

Map th =xlsBean.getTh();int index = 0;while(rs.next()) {long t1 =System.currentTimeMillis();

org.apache.poi.ss.usermodel.Row row=sheet

.createRow(index);for (int j = 0, numberOfColumns = rsmd.getColumnCount(); j < numberOfColumns; j++) {

String key= rsmd.getColumnLabel(j + 1).toLowerCase();if(th.containsKey(key)) {

TypeHandler> type =tr.getTypeHandler(JdbcType

.forCode(rsmd.getColumnType(j+ 1)));

Object obj=type.getResult(rs, key);

row.createCell(j).setCellValue(obj== null ? "": obj.toString());

}

}

System.out.println(index+ " :"

+ (System.currentTimeMillis() -t1));

index++;

}

}//重点 Workbook

wb.write(fileOut);

}catch(IOException e) {

e.printStackTrace();throw new ServiceRunTimeException("生产xls文档错误", e);

}finally{

}

}

在上面 标注了重点的两处,分别是:

1.构建一个Excel对象

2.将该对象写入一个OutPutStream

而在构建过程中,没有地方写入OutPutSteam ,也就是说必须在内存中构建整个 Excel,才能进行写出操作,在大数据量情况下,这样将导致所有数据加载到内存中,而不能输出,导致最后 内存溢出。

以上就是java字节转excel文件的全部内容,1.添加jar文件 java导入导出Excel文件要引入jxl.jar包,最关键的是这套API是纯Java的,并不依赖Windows,即使运行在Linux下,它同样能够正确的处理Excel文件。内容来源于互联网,信息真伪需自行辨别。如有侵权请联系删除。

猜你喜欢