【Java中导入/导出excel|Java中导入/导出excel,导出pdf报表信息】1.项目中经常需要用到报表生成,信息导入数据库的功能.主要有以下几种.
2.其中比较简单的是 外部数据无需处理直接 导入数据库中,这种比较简单.直接利用Navicat数据库工具 导入外部.示例如下
1.准备customer.xlsx文件信息
文章图片
2.使用导入向导,选择导入文件的xlsx文件类型
文章图片
3.选择导入数据源及相关表位置.
文章图片
4.选择导入xlsx数据源位置,从第几行开始导入,字段名行的相对行位置.
文章图片
5.选择导入数据 对应表字段相关信息
文章图片
6.选择导入模式,此处我使用的是 记录添加模式
文章图片
7.开始添加 ,影像了几条记录
文章图片
8.记录添加成功
文章图片
3.根据需要的信息 生成导出excel表格,具体代码示例如下
package com.bxd.app.util;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
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.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import com.bxd.app.view.biz.ExportExcelView;
public class ExportExcelUtil { /**
* 创建表格标题
*
* @param wb
*Excel文档对象
* @param sheet
*工作表对象
* @param headString
*标题名称
* @param col
*标题占用列数
*/
@SuppressWarnings("deprecation")
public static void createHeadTittle(HSSFWorkbook wb, HSSFSheet sheet, String headString, int col) {
HSSFRow row = sheet.createRow(0);
// 创建Excel工作表的行
HSSFCell cell = row.createCell(0);
// 创建Excel工作表指定行的单元格
row.setHeight((short) 1000);
// 设置高度cell.setCellType(HSSFCell.ENCODING_UTF_16);
// 定义单元格为字符串类型
cell.setCellValue(new HSSFRichTextString(headString));
sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, col));
// 指定标题合并区域// 定义单元格格式,添加单元格表样式,并添加到工作簿
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 指定单元格居中对齐
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
// 指定单元格垂直居中个对齐
cellStyle.setWrapText(true);
// 指定单元格自动换行// 设置单元格字体
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName("微软雅黑");
font.setFontHeightInPoints((short) 16);
// 字体大小cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
} /**
* 创建表头
*
* @param wb
*Excel文档对象
* @param sheet
*工作表对象
* @param thead
*表头内容
* @param sheetWidth
*每一列宽度
*/
@SuppressWarnings("deprecation")
public static void createThead(HSSFWorkbook wb, HSSFSheet sheet, String[] thead, int[] sheetWidth) {
HSSFRow row1 = sheet.createRow(1);
row1.setHeight((short) 600);
// 定义单元格格式,添加单元格表样式,并添加到工作簿
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
cellStyle.setWrapText(true);
cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
// 设置背景色
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
// 设置右边框类型
cellStyle.setRightBorderColor(HSSFColor.BLACK.index);
// 设置右边框颜色// 设置单元格字体
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setFontName("宋体");
font.setFontHeightInPoints((short) 10);
cellStyle.setFont(font);
// 设置表头内容
for (int i = 0;
i < thead.length;
i++) {
HSSFCell cell1 = row1.createCell(i);
cell1.setCellType(HSSFCell.ENCODING_UTF_16);
cell1.setCellValue(new HSSFRichTextString(thead[i]));
cell1.setCellStyle(cellStyle);
}// 设置每一列宽度
for (int i = 0;
i < sheetWidth.length;
i++) {
sheet.setColumnWidth(i, sheetWidth[i]);
}
} /**
* 填入数据
*
* @param wb
*// Excel文档对象
* @param sheet
*// 工作表对象
* @param result
*// 表数据
*/
@SuppressWarnings("deprecation")
public static void createTable(HSSFWorkbook wb, HSSFSheet sheet, List result) {
// 定义单元格格式,添加单元格表样式,并添加到工作薄
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setWrapText(true);
// 单元格字体
HSSFFont font = wb.createFont();
font.setFontName("宋体");
font.setFontHeightInPoints((short) 10);
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 居中// 循环插入数据
for (int i = 0;
i < result.size();
i++) {
HSSFRow row = sheet.createRow(i + 2);
row.setHeight((short) 400);
// 设置高度
HSSFCell cell = null;
int j = 0;
for (String key : (result.get(i).keySet())) {
cell = row.createCell(j);
cell.setCellStyle(cellStyle);
cell.setCellValue(new HSSFRichTextString(result.get(i).get(key)));
j++;
}
}
} public static void main(String[] args) {
//测试hashmaptreemaplinkedhashmap之间的顺序
/*Mapmap=new HashMap<>();
System.out.println("hashmap排序");
add_keyvalue(map);
TreeMapmap2=new TreeMap<>();
System.out.println("treemap排序");
add_keyvalue(map2);
LinkedHashMapmap3=new LinkedHashMap<>();
System.out.println("linkedhash排序");
add_keyvalue(map3);
*/// 1.封装数据
List list = new LinkedList<>();
ExportExcelView b1 = new ExportExcelView();
b1.setDeclsno("201810251706470169854601");
b1.setDecdt("2018-09-22");
b1.setEleacno("1209394999");
b1.setCustName("张三");
b1.setEntName("正信广电");
b1.setSaleName("郭启铭");
b1.setSaleTel("17342064227");
b1.setRealsumretbal("1000");
b1.setDecutionFee("100");
ExportExcelView b2 = new ExportExcelView();
b2.setDeclsno("201810251706470176052618");
b2.setDecdt("2018-09-22");
b2.setEleacno("1209394999");
b2.setCustName("赵四");
b2.setEntName("正信广电");
b2.setSaleName("郭启铭");
b2.setSaleTel("17342064227");
b2.setRealsumretbal("2000");
b2.setDecutionFee("200");
list.add(b1);
list.add(b2);
// 实体类转换为map
List result = new ArrayList<>();
LinkedHashMap map = new LinkedHashMap<>();
for (ExportExcelView e : list) {
map.put("declsno", e.getDeclsno());
map.put("decdt", e.getDecdt());
map.put("eleacno", e.getEleacno());
map.put("custName",e.getCustName());
map.put("entName",e.getEntName());
map.put("saleName",e.getSaleName());
map.put("saleTel",e.getSaleTel());
map.put("realsumretbal",e.getRealsumretbal());
map.put("decutionFee",e.getDecutionFee());
result.add(map);
}// 2.定义变量值 创建Excel文件
String fileName = "正信广电_201809代扣费用表.xls";
// 定义文件名
String headString = "正信广电_201809代扣费用表";
// 定义表格标题
String sheetName = "正信广电_201809代扣费用表";
// 定义工作表表名
String filePath = "D:\\";
// 文件本地保存路径
String[] thead = { "扣款流水", "扣款日期", "发电户号", "用户姓名", "开发商",
"业务员姓名","业务员手机号","扣款金额(元)", "代扣费用(元)" };
int[] sheetWidth = { 7500, 4000, 3000, 3000, 4000, 3000, 5000, 5000,5000};
// 定义每一列宽度HSSFWorkbook wb = new HSSFWorkbook();
// 创建Excel文档对象
HSSFSheet sheet = wb.createSheet(sheetName);
// 创建工作表// 3.生成表格
// ①创建表格标题
createHeadTittle(wb, sheet, headString, 8);
// result.get(0).size() - 1为表格占用列数,从0开始
// ②创建表头
createThead(wb, sheet, thead, sheetWidth);
// ③填入数据
createTable(wb, sheet, result);
FileOutputStream fos;
try {
fos = new FileOutputStream(new File(filePath + fileName));
wb.write(fos);
fos.close();
wb.close();
System.out.println("导出excel成功");
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} }
public static void add_keyvalue(Map map){
map.put("351", "11");
map.put("512", "222");
map.put("853", "333");
map.put("125", "333");
map.put("341", "333");
Iteratoriterator=map.keySet().iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}}
文章图片
2.导出pdf示例,将多张图片合成pdf文件 生成到指定位置
package com.bxd.app.util;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.bxd.core.util.FileUtil;
import com.lowagie.text.BadElementException;
import com.lowagie.text.Document;
import com.lowagie.text.DocumentException;
import com.lowagie.text.Image;
import com.lowagie.text.Rectangle;
import com.lowagie.text.pdf.PdfWriter;
class PrintToPdfUtil {
/**
*
* @param imageFolderPath
*图片文件夹地址
* @param pdfPath
*PDF文件保存地址
*
*/
public static void toPdf(String imageFolderPath, String pdfPath) {
try {
// 图片文件夹地址
// String imageFolderPath = "D:/Demo/ceshi/";
// 图片地址
String imagePath = null;
// PDF文件保存地址
// String pdfPath = "D:/Demo/ceshi/hebing.pdf";
// 输入流
FileOutputStream fos = new FileOutputStream(pdfPath);
// 创建文档
Document doc = new Document(null, 0, 0, 0, 0);
// doc.open();
// 写入PDF文档
PdfWriter.getInstance(doc, fos);
// 读取图片流
BufferedImage img = null;
// 实例化图片
Image image = null;
// 获取图片文件夹对象
File file = new File(imageFolderPath);
File[] files = file.listFiles();
// 循环获取图片文件夹内的图片
for (File file1 : files) {
if (file1.getName().endsWith(".png") || file1.getName().endsWith(".jpg")
|| file1.getName().endsWith(".gif") || file1.getName().endsWith(".jpeg")
|| file1.getName().endsWith(".tif")) {
// System.out.println(file1.getName());
imagePath = imageFolderPath + file1.getName();
// 读取图片流
img = ImageIO.read(new File(imagePath));
// 根据图片大小设置文档大小
doc.setPageSize(new Rectangle(img.getWidth(), img.getHeight()));
// 实例化图片
image = Image.getInstance(imagePath);
// 添加图片到文档
doc.open();
doc.add(image);
}
}
// 关闭文档
doc.close();
} catch (IOException e) {
e.printStackTrace();
} catch (BadElementException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
long time1 = System.currentTimeMillis();
toPdf("C:/2018-11-14/",
"C:/hebing.pdf");
long time2 = System.currentTimeMillis();
int time = (int) ((time2 - time1) / 1000);
System.out.println("执行了:" + time + "秒!");
}
}
文章图片
3.导入excel文件信息
package com.bxd.app.util;
import com.bxd.app.dao.biz.BdCustomerDao;
import com.bxd.app.entity.BdCustomer;
import com.bxd.core.util.BeanUtil;
import com.bxd.core.util.IdcardValidator;
import com.bxd.core.util.MD5;
import com.bxd.core.util.StringUtil;
import com.bxd.core.util.TelValidatorUtil;
import com.bxd.core.util.TextFormater;
import com.bxd.core.util.UUIDGenerator;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@Component
public class ImportCustomerUtil {
private static Logger logger =LoggerFactory.getLogger(ImportCustomerUtil.class);
@Autowired
public BdCustomerDao bdCustomerDao;
/**
* 生成需要的数据
*
* @param passwd
*密码
* @param filePath
*文件路径
* @param columns
*列数据
* @param type
*01 只需要注册的 02 代表 注册和实名都需要的弄的数据
* @return
*/
@SuppressWarnings("unused")
public static List import_excel(String passwd, String filePath, String columns[], String type) {
Workbook wb = null;
Sheet sheet = null;
Row row = null;
List