「导出多个表java」一次导出多张表格

博主:adminadmin 2022-11-24 18:39:08 54

本篇文章给大家谈谈导出多个表java,以及一次导出多张表格对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

求问 java poi 导出多个sheet页

SXSSFWorkbook workbook = new SXSSFWorkbook(1000);

Sheet sheet = workbook.createSheet("列表");

Sheet sheet1 = workbook.createSheet("列表1");

sheet.setDefaultColumnWidth(15);

sheet1.setDefaultColumnWidth(15);

Row header = sheet.createRow(0);

Row header1 = sheet1.createRow(0);

CellStyle style = workbook.createCellStyle();

style.setAlignment(CellStyle.ALIGN_CENTER);

Cell cell = header.createCell(0);

cell.setCellStyle(style);

cell.setCellValue("aa");

这样写是没问题的

关于 java poi 导出excel时 导出多个sheet的问题

看你代码可不是循环创建相同的sheet么,传参都是一样的。一般创建sheet不用写循环吧,有几个sheet页不是也知道吗,何况你也说了,sheet的内容是不一样的。如果你循环创建的sheet,劝你创建的对象名也要不一样,要不让你怎么获取对应的sheet,怎么再创建row,cell?

请教:java从数据库获取数据导出docx,有多个表格,请问怎么导出?

第一步:如何用POI操作Excel

@Test

public void createXls() throws Exception{

//声明一个工作薄

HSSFWorkbook wb = new HSSFWorkbook();

//声明表

HSSFSheet sheet = wb.createSheet("第一个表");

//声明行

HSSFRow row = sheet.createRow(7);

//声明列

HSSFCell cel = row.createCell(3);

//写入数据

cel.setCellValue("你也好");

FileOutputStream fileOut = new FileOutputStream("d:/a/b.xls");

wb.write(fileOut);

fileOut.close();

}

第二步:导出指定数据库的所有表

分析:

1:某个数数据库有多少表,表名是什么?―――DataBaseMetadate.getMetadate().getTables(null,null,null,new String[]{Table}); - excel的文件名称。

2:对每一个表进行select * 操作。 - 每一个sheet的名称。

3:分析表结构,rs.getMetadate(); ResultSetMedated

4:多个列,列名是什么.- 字段名就是sheet的第一行信息。

5:获取每一行的数据 – 放到sheet第一行以后。

@Test

public void export() throws Exception{

//声明需要导出的数据库

String dbName = "focus";

//声明book

HSSFWorkbook book = new HSSFWorkbook();

//获取Connection,获取db的元数据

Connection con = DataSourceUtils.getConn();

//声明statemen

Statement st = con.createStatement();

//st.execute("use "+dbName);

DatabaseMetaData dmd = con.getMetaData();

//获取数据库有多少表

ResultSet rs = dmd.getTables(dbName,dbName,null,new String[]{"TABLE"});

//获取所有表名 - 就是一个sheet

ListString tables = new ArrayListString();

while(rs.next()){

String tableName = rs.getString("TABLE_NAME");

tables.add(tableName);

}

for(String tableName:tables){

HSSFSheet sheet = book.createSheet(tableName);

//声明sql

String sql = "select * from "+dbName+"."+tableName;

//查询数据

rs = st.executeQuery(sql);

//根据查询的结果,分析结果集的元数据

ResultSetMetaData rsmd = rs.getMetaData();

//获取这个查询有多少行

int cols = rsmd.getColumnCount();

//获取所有列名

//创建第一行

HSSFRow row = sheet.createRow(0);

for(int i=0;icols;i++){

String colName = rsmd.getColumnName(i+1);

//创建一个新的列

HSSFCell cell = row.createCell(i);

//写入列名

cell.setCellValue(colName);

}

//遍历数据

int index = 1;

while(rs.next()){

row = sheet.createRow(index++);

//声明列

for(int i=0;icols;i++){

String val = rs.getString(i+1);

//声明列

HSSFCell cel = row.createCell(i);

//放数据

cel.setCellValue(val);

}

}

}

con.close();

book.write(new FileOutputStream("d:/a/"+dbName+".xls"));

}

java excel 导出 多个sheet

以下代码仅供参考:

//生成一个excel文件

WritableWorkbook wwb = null;

try {

//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象

wwb = Workbook.createWorkbook(new File(fileName));

} catch (IOException e) {

log.error(e); }

long totle = service.getTotle(searchParameters);//业务逻辑方法,获取总数,便于在excel分多个工作表

//按65536条数据分页

float res=Float.parseFloat(String.valueOf(totle));

float mus=65536;

float avg=res/mus;

Map cols = (Map) request.getSession().getAttribute("columnsMap"); //业务逻辑方法

for (int i = 0; i avg+1; i++) {

searchParameters.setEvent_id(String.valueOf(i*mus)); //分页查询条件

searchParameters.setTotalLimit(String.valueOf((i+1)*mus));//分页查询条件

List result = service.getEvents(searchParameters); //分页查询方法

if(wwb!=null){

//创建一个可写入的工作表

//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置

WritableSheet ws = wwb.createSheet("列表"+(i+1), i);

String colss = ((String) cols.get("cols")).substring("selected"

.length() + 1);

String[] columns = colss.split(","); //业务逻辑方法(添加标题)

String[] colNames = ((String) cols.get("colNames")).split(",");

for (int j = 0; j columns.length; j++) {

jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false,jxl.format.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);

jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);

wcfFC.setBackground(Colour.GRAY_25);

Label label = new Label(j, 0,colNames[j],wcfFC);

ws.setColumnView(j, 20); //设置列宽

ws.addCell(label); //添加标题

}

String str="";

//下面开始添加单元格

for(int m=0;mresult.size();m++){

for(int j=0;jcolumns.length;j++){

Map map = (Map) result.get(m);

//在表格中添加(业务数据)

for (Object key : map.keySet()) {

Object val = map.get(key);

str=String.valueOf(val);

//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行

Label labelC = new Label(j, m+1, str);

//将生成的单元格添加到工作表中

ws.addCell(labelC);

}

}

}

}

}

//Excel操作完毕之后,关闭所有的操作资源

try {

//从内存中写入文件中

wwb.write();

//关闭资源,释放内存

wwb.close();

} catch (IOException e) {

log.error(e);

} catch (WriteException e) {

log.error(e);

}

//把生成的文件下载

File file = new File(fileName);

if(!file.exists()) throw new Exception("文件不存在!");

FileInputStream fileInputStream = new FileInputStream(file);

BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);

OutputStream outputStream = response.getOutputStream();

BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream);

response.setContentType("application/x-download");

response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode("事件列表.xls", "UTF-8"));

int bytesRead = 0;

byte[] buffer = new byte[8192];

while ((bytesRead = bufferedInputStream.read(buffer, 0, 8192)) != -1) {

bufferedOutputStream.write(buffer, 0, bytesRead);

}

bufferedOutputStream.flush();

fileInputStream.close();

bufferedInputStream.close();

outputStream.close();

bufferedOutputStream.close();

Java要怎么实现这种特殊表的导出?

首先这个可以用Java实现,如果要实现类似这样的效果需要引入Java Excel API类库,它是开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作。这个项目基于GPL发布,而且对中文有很好的支持。对于里面合并行,合并列就需要根据逻辑代码调用具体方法来实现了。

1.类库地址下载

jExcelApi 的 JavaDoc:

2.具体实现

一、需要导入的jar

1.commons-collections4-4.1.jar

2.poi-3.17-beta1.jar

3.poi-ooxml-3.17-beta1.jar

4.poi-ooxml-schemas-3.17-beta1.jar

5.xmlbeans-2.6.0.jar

二、主要API

1.import org.apache.poi.ss.usermodel.Workbook,对应Excel文档;

2.import org.apache.poi.hssf.usermodel.HSSFWorkbook,对应xls格式的Excel文档;

3.import org.apache.poi.xssf.usermodel.XSSFWorkbook,对应xlsx格式的Excel文档;

4.import org.apache.poi.ss.usermodel.Sheet,对应Excel文档中的一个sheet;

5.import org.apache.poi.ss.usermodel.Row,对应一个sheet中的一行;

6.import org.apache.poi.ss.usermodel.Cell,对应一个单元格。

还有合并行,合并列,行背景色,加粗,一般table有的样式,基本都具有。

JAVA如何实现导出大数量EXCEL报表 数据大概100W条

好像是你的excel文件问题,你另外新建一个,再写点东西在里面试下随便给你一个我以前用过的importjava.io.*;importjava.text.SimpleDateFormat;importjava.util.*;importjava.sql.*;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjxl.*;publicclassSimUpdate{privateStringfileName;publicSimUpdate(StringfileName){this.fileName=fileName;}staticMaptNames;static{tNames=newHashMap();}//下面是主要代码privatevoidupdateDb(){try{Connectionconn=DbPool.connectDB();if(conn!=null){Statementstmt=conn.createStatement();/**********************************************/jxl.Workbookrwb=null;try{//构建Workbook对象只读Workbook对象//直接从本地文件创建Workbook//从输入流创建WorkbookInputStreamis=newFileInputStream(fileName);rwb=Workbook.getWorkbook(is);//Sheet(术语:工作表)就是Excel表格左下角的Sheet ,Sheet ,Sheet 但在程序中//Sheet的下标是从 开始的//获取第一张Sheet表Sheetrs=rwb.getSheet( );//获取Sheet表中所包含的总列数intrsColumns=rs.getColumns();//获取Sheet表中所包含的总行数intrsRows=rs.getRows();//获取指这下单元格的对象引用StringsimNumber="",termSeqId="";//指定SIM卡号及序列号for(inti= ;i ){System.out.println("成功插入第"+i+"条数据");}}}//以下代码为写入新的EXCEL,这里不使用,所以注释/*//利用已经创建的Excel工作薄创建新的可写入的Excel工作薄jxl.write.WritableWorkbookwwb=Workbook.createWorkbook(newFile("D://Book .xls"),rwb);//读取第一张工作表jxl.write.WritableSheetws=wwb.getSheet( );//获取第一个单元格对象jxl.write.WritableCellwc=ws.getWritableCell( , );//决断单元格的类型,做出相应的转化if(wc.getType()==CellType.LABEL){Labell=(Label)wc;l.setString("Thevaluehasbeenmodified.");}//写入Excel对象wwb.write();wwb.close();*/}catch(Exceptione){e.printStackTrace();}finally{//操作完成时,关闭对象,翻译占用的内存空间rwb.close();}/*********************************************/}}catch(Exceptione){e.printStackTrace();}}}

导出多个表java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于一次导出多张表格、导出多个表java的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。