本文先创建一个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相关推荐

  1. java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)

    Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...

  2. java excel类库,jExcelApi Java 操作 Excel 的类库

    jExcelApi Java 操作 Excel 的类库 Java Excel API(JXL)是一个成熟,开源的用来操作Excel电子表格的Java类库,支持读取,修改,写入等操作.这个项目基于GPL ...

  3. 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 ...

  4. java操作Excel、PDF文件

    java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...

  5. java操作excel表

    文章分类:Java编程 http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介 JAVA EXCEL API简介 Java ...

  6. JAVA操作Excel时文字自适应单元格的宽度设置方法

    使用JAVA操作Excel通常都使用JXL,方法很简单网上也有很多的教程,然后往往一些细节性的问题却导致我们这些Programmer苦恼不已.这两天帮一个朋友做一个Excel表格自动生成的小软件,就遇 ...

  7. java excel 插入新行_POI ,Java 操作 Excel 實現行的插入(insert row)

    POI ,Java 操作 Excel 實現行的插入(insert row) 前幾天,正在做一個項目,主要用 POI 來操作 Excel 其中,要使用一個,插入功能.主要是因為從數據庫,返回結果集(數據 ...

  8. Java操作Excel三种方式POI、Hutool、EasyExcel

    Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...

  9. Java操作Excel之Excel文件的下载

    1.有的时候在Web应用会有下载Excel的需求,现分享下后台实现下载Excel文件的代码 @RequestMapping(value = "/exportExcel", meth ...

  10. Java 操作excel表格 - JXL(Java excel api)

    Java 操作excel表格 Java 操作 Excel 最常用的就是JXL(Java excel api)和POI,用起来挺简单的,不过相应的其功能也并非很强大,够用就行! 首先,下载jxl.jar ...

最新文章

  1. ios Carthage
  2. 呵呵,你开心就好!——AI向杠精宣战
  3. 变量作用域函数作用域
  4. ruby 正则表达式 使用正负预查
  5. 数据结构源码笔记(C语言):哈希表的相关运算算法
  6. java构造函数的重载_java初学者对构造方法和重载的理解
  7. Cell Phone Network
  8. 软件设计师 - 超键、无损连接、函数依赖
  9. 论文schedule
  10. Java----日期算法(计算两个date类型的时间差)
  11. 35岁真的是职场分水岭吗?
  12. RPM-GPG-KEY在包安装时候的作用
  13. 一步一步教你用 Vue.js + Vuex 制作专门收藏微信公众号的 app
  14. ERROR 1045 (28000): Access denied for user 'root'@'localhost' 的解决方法
  15. mc服务器地图无限大吗,我的世界:4个小秘密,没想到啊,地图的范围这么大!...
  16. 手动杀毒,SOLA病毒,也称之为worm.script.bat.Agent、Trojan.Win32.Sola病毒)
  17. Java垃圾回收的工作原理和最佳做法
  18. 计算机网络基础之安全防范措施
  19. 我把3个镜头手机拍的照片发微信群,哥们说,现在手机摄像头越来越多,我有一个扫码就够了...
  20. 模拟信号隔离器|隔离放大器|隔离变送器 常见问题解答

热门文章

  1. 使用位运算实现乘法和乘方运算
  2. C文件中的中文乱码 notepad2
  3. 01、JUL日志(JDK自带日志框架,包含源码分析)
  4. cmd命令下,使用java命令,运行指定目录下的*.class文件。
  5. 聚合架构-晓岩企业架构系列讲座整理(20-29)
  6. P2P网贷系统-核心功能-用户投标-业务讲解
  7. wordPress数据结构 数据库中的表、字段、类型及说明
  8. Mysql删除百万数据提升速度方法
  9. Safari下载文件名乱码
  10. windows黑客编程技术之加密技术:windows自带的加密库