java操作Excel,mdb,dbf
本文先创建一个Excel模板,好处是模板可以随便换,不用受代码的拘束,如果模板复杂生成模板的代码的逻辑也会比较复杂。如果客户需要更换模板程序员需要重新代码生成模板。所以这样写就省去很多好处。
模板存储位置如上
package com.feng.hangzhouproject.controller;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.feng.hangzhouproject.entity.result.Business_result;
import com.feng.hangzhouproject.export.ExportExcel1;
import com.feng.hangzhouproject.tools.DbfUtil;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* 数据导出
*/
@Controller
@RequestMapping("/export")
public class ExportDataController {
//导出
@RequestMapping(value = "/business",produces = { "application/json;charset=UTF-8" })
@ResponseBody
public Map<String, String> export_Business(String time,String array, Model model,HttpServletRequest req) {
Map<String, String> map = new HashMap<String, String>();
//AccessUtil accessUtil =new AccessUtil();
DbfUtil dbfUtil =new DbfUtil();
try {
//字符转转成JSONArray
JSONArray jsonArray = JSONArray.fromObject(array);
List<Business_result> list1 = new ArrayList<Business_result>();
//将数组中的内容转成对象存入list1中
for(int i=0;i<jsonArray.size();i++){
Object o=jsonArray.get(i);
JSONObject jsonObject=JSONObject.fromObject(o);
Business_result br=(Business_result)JSONObject.toBean(jsonObject, Business_result.class);
list1.add(i, br);
}
//导出mdb
//accessUtil.connetAccessDB(time, list1, req);
//导出dbf
dbfUtil.writeDBF(time, list1, req);
String str=req.getSession().getServletContext().getContextPath();
//全路径
String str1=req.getSession().getServletContext().getRealPath("exportfile");
System.out.println(str);
//模板路径
URL url =model.getClass().getResource("/model/2017年2季度国控城市功能区环境声环境监测数据(杭州).xls");
String path = url.toURI().getPath();
System.out.println(path);
//获取年份
String year = time.substring(0, 4);
//获取月份
String month = time.substring(5, 7);
//判断第一季度
if(month.equals("01")||month.equals("02")||month.equals("03")){
ExportExcel1.writeResult1(path, str1+"/"+year+"年1季度国控城市功能区环境声环境监测数据(杭州).xls", list1);
map.put("excel下载地址",str+"/exportfile/"+year+"年1季度国控城市功能区环境声环境监测数据(杭州).xls");
map.put("dbf下载地址",str+"/exportfile/"+year+"年1季度国控城市功能区环境声环境监测数据(杭州).dbf");
System.out.println(map);
}
//判断第二季度
else if(month.equals("04")||month.equals("05")||month.equals("06")){
ExportExcel1.writeResult1(path, str1+"/"+year+"年2季度国控城市功能区环境声环境监测数据(杭州).xls",list1);
map.put("excel下载地址", str+"/exportfile/"+year+"年2季度国控城市功能区环境声环境监测数据(杭州).xls");
map.put("dbf下载地址",str+"/exportfile/"+year+"年2季度国控城市功能区环境声环境监测数据(杭州).dbf");
}
//判断第三季度
else if(month.equals("07")||month.equals("08")||month.equals("09")){
ExportExcel1.writeResult1(path, str1+"/"+year+"年3季度国控城市功能区环境声环境监测数据(杭州).xls", list1);
map.put("excel下载地址", str+"/exportfile/"+year+"年3季度国控城市功能区环境声环境监测数据(杭州).xls");
map.put("dbf下载地址",str+"/exportfile/"+year+"年3季度国控城市功能区环境声环境监测数据(杭州).dbf");
}
//判断第四季度
else{
ExportExcel1.writeResult1(path, str1+"/"+year+"年4季度国控城市功能区环境声环境监测数据(杭州).xls", list1);
map.put("excel下载地址", str+"/exportfile/"+year+"年4季度国控城市功能区环境声环境监测数据(杭州).xls");
map.put("dbf下载地址",str+"/exportfile/"+year+"年4季度国控城市功能区环境声环境监测数据(杭州).dbf");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return map;
}
}
生成Excel的工具类
package com.feng.hangzhouproject.export;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List;
import org.apache.poi.ss.usermodel.Cell;
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.ss.usermodel.WorkbookFactory;
import com.feng.hangzhouproject.entity.result.Business_result;
import com.feng.hangzhouproject.tools.ExcelOperateTool;
import net.sf.json.JSONArray;
public class ExportExcel1 {
/**
* 填充单元格
* @param sheet
* @param columns
* @param startRow
*/
public static void pointDataInsert(Sheet sheet, String[] columns, int startRow) {
Row row = sheet.createRow(startRow);
for (int i = 0; i < columns.length; i++) {
String value = columns[i];
if (value != null && !value.equalsIgnoreCase("null")) {
row.createCell(i, Cell.CELL_TYPE_STRING).setCellValue(value.toString());
}
}
}
public static void writeResult(String in,String out,JSONArray json) throws Exception{
ExcelOperateTool.copyExcel(new File(in), new File(out));
InputStream is = new FileInputStream(out);
//根据输入流创建Workbook对象
Workbook wb = WorkbookFactory.create(is);
Sheet sheet = wb.getSheetAt(0);
for(int i = 2;i-2<json.size();i++){
JSONArray array = json.getJSONArray(i-2);
String[] data = new String[array.size()];
Object[] ar = array.toArray();
for(int j=0;j<array.size();j++){
data[j] = ar[j]+"";
}
pointDataInsert(sheet,data,i);
}
FileOutputStream fos = new FileOutputStream(out);
wb.write(fos);
fos.flush();
fos.close();
}
public static void writeResult1(String in,String out,List<Business_result> list) throws Exception{
JSONArray b = new JSONArray();
for(int i=0;i<list.size();i++){
JSONArray list1 = new JSONArray();
list1.add(list.get(i).getSn());
list1.add(list.get(i).getStcode());
list1.add(list.get(i).getYear());
list1.add(list.get(i).getPoint_num());
list1.add(list.get(i).getPoint_num());
list1.add(list.get(i).getLongitude().toString());
list1.add(list.get(i).getLatitude().toString());
list1.add(list.get(i).getHeight().toString());
list1.add(list.get(i).getReference());
list1.add(list.get(i).getType());
list1.add(list.get(i).getMonth());
list1.add(list.get(i).getDay());
list1.add(list.get(i).getHours());
list1.add(list.get(i).getMinute());
list1.add(String.valueOf(list.get(i).getLeq()));
list1.add(String.valueOf(list.get(i).getL10()));
list1.add(String.valueOf(list.get(i).getL50()));
list1.add(String.valueOf(list.get(i).getL90()));
list1.add(String.valueOf(list.get(i).getLmax()));
list1.add(String.valueOf(list.get(i).getLmin()));
list1.add(String.valueOf(list.get(i).getSd()));
list1.add(list.get(i).getMonitor_name());
list1.add(list.get(i).getManufacturers());
list1.add(list.get(i).getEquipment_num());
list1.add(list.get(i).getRight_limits());
list1.add(list.get(i).getLeft_limits());
list1.add(String.valueOf(list.get(i).getReality_value()));
list1.add(list.get(i).getCalibration_type());
list1.add(list.get(i).getCalibration_num());
b.add(i, list1);
}
writeResult(in,out,b);
}
}
导出结果如下
生成mdb的工具类
package com.feng.hangzhouproject.tools;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.*;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.feng.hangzhouproject.entity.result.Business_result;
public class AccessUtil {
private Connection conn;
// 空白的文件地址
private final String blankMdbFilePath = "model/Database.mdb";
// 需要保存到的新的mdb文件路径和名
private String savedMdbFilePath = null;
// 标准的单件模式
private static AccessUtil instance = new AccessUtil();
public static AccessUtil getInstance() {
return instance;
}
// 新的文件名字
public String savedMdbFilePathAndName(String time,HttpServletRequest req) {
//获取年份
String year = time.substring(0, 4);
// 获取月份
String month = time.substring(5, 7);
String str1=req.getSession().getServletContext().getRealPath("exportfile");
if (month.equals("01") || month.equals("02") || month.equals("03")) {
savedMdbFilePath = str1+"/" + year + "年1季度国控城市功能区环境声环境监测数据(杭州).mdb";
} else if (month.equals("04") || month.equals("05") || month.equals("06")) {
savedMdbFilePath = str1+"/" + year + "年2季度国控城市功能区环境声环境监测数据(杭州).mdb";
} else if (month.equals("07") || month.equals("08") || month.equals("09")) {
savedMdbFilePath = str1+"/" + year + "年3季度国控城市功能区环境声环境监测数据(杭州).mdb";
} else {
savedMdbFilePath = str1+"/" + year + "年4季度国控城市功能区环境声环境监测数据(杭州).mdb";
}
return savedMdbFilePath;
}
/**
* <p>
* Description: 将空白mdb文件拷贝到特定目录
* </p>
*/
public void copyBlankMdbFile(String time,HttpServletRequest req) throws Exception {
InputStream is = this.getClass().getClassLoader().getResourceAsStream(blankMdbFilePath);
OutputStream out = new FileOutputStream(savedMdbFilePathAndName(time,req));
System.out.println(savedMdbFilePathAndName(time,req));
byte[] buffer = new byte[1024];
int numRead;
while ((numRead = is.read(buffer)) != -1) {
out.write(buffer, 0, numRead);
}
is.close();
out.close();
}
/**
* <p>
* Description: 打开对mdb文件的jdbc-odbc连接
* </p>
*/
public void connetAccessDB(String time, List<Business_result> list,HttpServletRequest req) throws Exception {
//拷贝文件
copyBlankMdbFile( time,req);
Class.forName("com.hxtt.sql.access.AccessDriver");
//String dbur1 = "jdbc:Access:///d:/杭州.mdb";
String database = "jdbc:Access:///" + savedMdbFilePathAndName(time,req);
conn = DriverManager.getConnection(database, "", "");
String sql = "insert into qn values(?,?,?,?,?,?,?,?,?,?,?,?,?)";
PreparedStatement prest = conn.prepareStatement(sql);
for (int i = 0; i < list.size(); i++) {
prest.setLong(1, Long.parseLong(list.get(i).getYear()));
prest.setString(2, list.get(i).getMonitor_name());
prest.setLong(3, Long.parseLong(list.get(i).getStcode()));
prest.setString(4, list.get(i).getPoint_name());
prest.setLong(5, Long.parseLong(list.get(i).getPoint_num()));
// 噪声功能区代码
prest.setLong(6, Long.parseLong(list.get(i).getType().substring(0, 1)));
prest.setInt(7, Integer.parseInt(list.get(i).getMonth()));
prest.setInt(8, Integer.parseInt(list.get(i).getDay()));
prest.setInt(9, Integer.parseInt(list.get(i).getHours()));
prest.setDouble(10, Double.parseDouble(list.get(i).getLeq()));
prest.setDouble(11, Double.parseDouble(list.get(i).getL10()));
prest.setDouble(12, Double.parseDouble(list.get(i).getL50()));
prest.setDouble(13, Double.parseDouble(list.get(i).getL90()));
prest.addBatch();
}
prest.executeBatch();
conn.commit();
conn.close();
}
}
生成dbf的工具类
package com.feng.hangzhouproject.tools;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.feng.hangzhouproject.entity.result.Business_result;
import com.linuxense.javadbf.DBFWriter;
public class DbfUtil {
// 空白的文件地址
private final String blankDbfFilePath = "model/hangzhou.dbf";
// 需要保存到的新的mdb文件路径和名
private String savedDbfFilePath = null;
// 标准的单件模式
private static DbfUtil instance = new DbfUtil();
public static DbfUtil getInstance() {
return instance;
}
// 新的文件名字
public String savedDbfFilePathAndName(String time, HttpServletRequest req) {
// 获取年份
String year = time.substring(0, 4);
// 获取月份
String month = time.substring(5, 7);
String str1 = req.getSession().getServletContext().getRealPath("exportfile");
if (month.equals("01") || month.equals("02") || month.equals("03")) {
savedDbfFilePath = str1 + "/" + year + "年1季度国控城市功能区环境声环境监测数据(杭州).dbf";
} else if (month.equals("04") || month.equals("05") || month.equals("06")) {
savedDbfFilePath = str1 + "/" + year + "年2季度国控城市功能区环境声环境监测数据(杭州).dbf";
} else if (month.equals("07") || month.equals("08") || month.equals("09")) {
savedDbfFilePath = str1 + "/" + year + "年3季度国控城市功能区环境声环境监测数据(杭州).dbf";
} else {
savedDbfFilePath = str1 + "/" + year + "年4季度国控城市功能区环境声环境监测数据(杭州).dbf";
}
return savedDbfFilePath;
}
/**
* 拷贝DBF空文件
*
* @param time
* @param req
* @throws Exception
*/
public void copyBlankDbfFile(String time, HttpServletRequest req) throws Exception {
InputStream is = this.getClass().getClassLoader().getResourceAsStream(blankDbfFilePath);
OutputStream out = new FileOutputStream(savedDbfFilePathAndName(time, req));
System.out.println(savedDbfFilePathAndName(time, req));
byte[] buffer = new byte[1024];
int numRead;
while ((numRead = is.read(buffer)) != -1) {
out.write(buffer, 0, numRead);
}
is.close();
out.close();
}
public void writeDBF(String time, List<Business_result> list, HttpServletRequest req) throws Exception {
//InputStream fis = null;
OutputStream fos=null;
// 拷贝DBF文件
copyBlankDbfFile(time, req);
// 定义DBFWriter实例用来写DBF文件
DBFWriter writer = new DBFWriter(new File(savedDbfFilePathAndName(time, req))); ;
// 把字段信息写入DBFWriter实例,即定义表结构
for (int i = 0; i < list.size(); i++) {
//一条条的写入记录
Object[] rowData = new Object[13];
rowData[0] = Long.parseLong(list.get(i).getYear());
rowData[1] = list.get(i).getMonitor_name();
rowData[2] = Long.parseLong(list.get(i).getStcode());
rowData[3] = list.get(i).getPoint_name();
rowData[4] = Long.parseLong(list.get(i).getPoint_num());
rowData[5] = Long.parseLong(list.get(i).getType().substring(0, 1));
rowData[6] = Long.parseLong(list.get(i).getMonth());
rowData[7] = Long.parseLong(list.get(i).getDay());
rowData[8] = Long.parseLong(list.get(i).getHours());
rowData[9] = Float.parseFloat(list.get(i).getLeq());
rowData[10] = Float.parseFloat(list.get(i).getL10());
rowData[11] = Float.parseFloat(list.get(i).getL50());
rowData[12] = Float.parseFloat(list.get(i).getL90());
writer.addRecord(rowData);
}
}
}
大家可以参考下,希望多交流
java操作Excel,mdb,dbf相关推荐
- java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)
Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...
- java excel类库,jExcelApi Java 操作 Excel 的类库
jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...
- java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
Java操作Excel/Jakarta POI API/data/Jakarta POI API.doc Java操作Excel/Jakarta POI API/jar/poi-3.0.2-FINAL ...
- java操作Excel、PDF文件
java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...
- java操作excel表
文章分类:Java编程 http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介 JAVA EXCEL API简介 Java ...
- JAVA操作Excel时文字自适应单元格的宽度设置方法
使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...
- java excel 插入新行_POI ,Java 操作 Excel 實現行的插入(insert row)
POI ,Java 操作 Excel 實現行的插入(insert row) 前幾天,正在做一個項目,主要用 POI 來操作 Excel 其中,要使用一個,插入功能.主要是因為從數據庫,返回結果集(數據 ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- Java操作Excel之Excel文件的下载
1.有的时候在Web应用会有下载Excel的需求,现分享下后台实现下载Excel文件的代码 @RequestMapping(value = "/exportExcel", meth ...
- Java 操作excel表格 - JXL(Java excel api)
Java 操作excel表格 Java 操作 Excel 最常用的就是JXL(Java excel api)和POI,用起来挺简单的,不过相应的其功能也并非很强大,够用就行! 首先,下载jxl.jar ...
最新文章
- ios Carthage
- 呵呵,你开心就好!——AI向杠精宣战
- 变量作用域函数作用域
- ruby 正则表达式 使用正负预查
- 数据结构源码笔记(C语言):哈希表的相关运算算法
- java构造函数的重载_java初学者对构造方法和重载的理解
- Cell Phone Network
- 软件设计师 - 超键、无损连接、函数依赖
- 论文schedule
- Java----日期算法(计算两个date类型的时间差)
- 35岁真的是职场分水岭吗?
- RPM-GPG-KEY在包安装时候的作用
- 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
- ERROR 1045 (28000): Access denied for user 'root'@'localhost' 的解决方法
- mc服务器地图无限大吗,我的世界:4个小秘密,没想到啊,地图的范围这么大!...
- 手动杀毒,SOLA病毒,也称之为worm.script.bat.Agent、Trojan.Win32.Sola病毒)
- Java垃圾回收的工作原理和最佳做法
- 计算机网络基础之安全防范措施
- 我把3个镜头手机拍的照片发微信群,哥们说,现在手机摄像头越来越多,我有一个扫码就够了...
- 模拟信号隔离器|隔离放大器|隔离变送器 常见问题解答