「导出多个表java」一次导出多张表格
本篇文章给大家谈谈导出多个表java,以及一次导出多张表格对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、求问 java poi 导出多个sheet页
- 2、关于 java poi 导出excel时 导出多个sheet的问题
- 3、请教:java从数据库获取数据导出docx,有多个表格,请问怎么导出?
- 4、java excel 导出 多个sheet
- 5、Java要怎么实现这种特殊表的导出?
- 6、JAVA如何实现导出大数量EXCEL报表 数据大概100W条
求问 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的信息别忘了在本站进行查找喔。
发布于:2022-11-24,除非注明,否则均为
原创文章,转载请注明出处。