java中的excel数据的导入和导出

Excel数据导出

技术:Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能。POI为“Poor Obfuscation Implementation”的首字母缩写,意为“可怜的模糊实现”。

用它可以使用Java读取和创建,修改MS Excel文件.而且,还可以使用Java读取和创建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解决方案(适用于Excel97-2008)

入门案例:

思路: 1.导入依赖 2.测试

1.1导入依赖

1 <dependency>
2           <groupId>org.apache.poi</groupId>
3           <artifactId>poi</artifactId>
4           <version>3.15</version>
5       </dependency>

1.2.测试,结果生成一张excel表格

public static void main(String[] args) throws FileNotFoundException, IOException {
        // 创建excel
        HSSFWorkbook wk = new HSSFWorkbook();
        // 创建一张工作表
        HSSFSheet sheet = wk.createSheet();
        // 设置列宽
        sheet.setColumnWidth(0, 5000);
        // 创建第一行
        HSSFRow row = sheet.createRow(0);
        // 创建第一行的第一个单元格
        HSSFCell cell = row.createCell(0);
        // 想单元格写值
        cell.setCellValue("测试");
        // 保存到本地
        wk.write(new FileOutputStream(new File("D://ERP/a.xls")));
        // 关闭工作薄
        wk.close();
    }

2.和项目的结合

思路:1.依赖 2.service层 3.action层 4.web层

2.1.依赖

2.2.service层

思路:
1.创建工作薄
2.工作表名字
3.工作表创建
4.创建行,创建每一个单元格
5.给每个单元格塞数据
6.关流

  

/**
     * 导出供应商的数据
     */
    @Override
    public void export(OutputStream os, Supplier t1) {
        //查出符合条件的所供应/客户的列表
        List<Supplier> supplierList = supplierDao.getList(t1, null, null);
        //工作簿
        Workbook wk = new HSSFWorkbook();

        //创建工作表
        String sheetName = "";
        if(Supplier.TYPE_SUPPLIER.equals(t1.getType())){
            sheetName = "供应商";
        }
        if(Supplier.TYPE_CUSTOMER.equals(t1.getType())){
            sheetName = "客户";
        }
        Sheet sheet = wk.createSheet(sheetName);

        //创建一行,参数指的是: 行的索引=行号-1
        Row row = sheet.createRow(0);
        //列名,表头
        String[] headers = {"名称","地址","联系人","电话","Email"};
        //String[] methodname = {"getName","getAddress", "getContact","getTele","getEmail"};
        /*Method[] methods = Supplier.class.getMethods();
        Map<String, Method> methodNameMap = new HashMap<String,Method>();
        for(Method m : methods){
            methodNameMap.put(m.getName(), m);
        }*/
        for(int i = 0; i < headers.length; i++){
            row.createCell(i).setCellValue(headers[i]);

        }
        //创建单元格, 参数指的是:列的索引,从0开始
        //输出每一条记录
        if(null != supplierList && supplierList.size() > 0){
            Supplier supplier = null;
            for(int i = 1; i<=supplierList.size(); i++){
                row = sheet.createRow(i);
                supplier = supplierList.get(i-1);
                /*for(String mname : methodname){
                    Method m = methodNameMap.get(mname);
                    try {
                        Object obj = m.invoke(supplier, new Object[]{});
                        Class<?> returnType = m.getReturnType();
                        //returnType.cast(obj);
                        row.createCell(0).setCellValue(returnType.cast(obj));//名称
                    } catch (IllegalAccessException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IllegalArgumentException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InvocationTargetException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                }*/
                row.createCell(0).setCellValue(supplier.getName());//名称
                row.createCell(1).setCellValue(supplier.getAddress());//地址
                row.createCell(2).setCellValue(supplier.getContact());//联系
                row.createCell(3).setCellValue(supplier.getTele());//电话
                row.createCell(4).setCellValue(supplier.getEmail());//Email
            }
        }

        //输出到输出流中
        try {
            wk.write(os);
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                wk.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

2.3.action层

 1 思路:
 2 1.给下载的文件名字的判断
 3 2.设置下载的响应头
 4 /**
 5      * 导出
 6      */
 7     public void export(){
 8         try {
 9             String filename = "";
10             if(Supplier.TYPE_SUPPLIER.equals(getT1().getType())){
11                 filename = "供应商.xls";
12             }
13             if(Supplier.TYPE_CUSTOMER.equals(getT1().getType())){
14                 filename = "客户.xls";
15             }
16             HttpServletResponse res = ServletActionContext.getResponse();
17             res.setHeader("Content-Disposition", "attachment;filename=" +
18                         new String(filename.getBytes(),"ISO-8859-1"));
19             supplierBiz.export(ServletActionContext.getResponse().getOutputStream(),getT1());
20         } catch (IOException e) {
21             e.printStackTrace();
22         }
23     }

2.4.前端

思路:
1.页面导入js
2.js在抽取的crud中添加导出的按钮
<script type="text/javascript" src="ui/download.js"></script>

‘-‘,{
                text: ‘导出‘,
                iconCls: ‘icon-excel‘,
                handler: function(){
                    //查询条件
                    var searchData = $(‘#searchForm‘).serializeJSON();
                    //请求下载文件
                    $.download("supplier_export?t1.type=" + Request[‘type‘], searchData);
                }
            },

3.导出的进一步加强

思路:1.依赖 2.service层创建创建表格和处理数据 3.action   4.前端

1.依赖

2.service层创建创建表格和处理数据

  1 //思路:1创建表格 2.sheet名字 3.数据样式 4.行数 5.数据处理6.关流
  2 /**
  3      * 导出订单
  4      */
  5     @Override
  6     public void exportById(OutputStream os, Long uuid) {
  7         //根据订单编号获取订单
  8         Orders orders = ordersDao.get(uuid);
  9         //订单明细
 10         List<Orderdetail> orderDetails = orders.getOrderDetails();
 11
 12         String sheetName = "";
 13         if(Orders.TYPE_IN.equals(orders.getType())){
 14             sheetName = "采 购 单";
 15         }
 16         if(Orders.TYPE_OUT.equals(orders.getType())){
 17             sheetName = "销 售 单";
 18         }
 19         //工作簿
 20         HSSFWorkbook wk = new HSSFWorkbook();
 21
 22         //创建工作表
 23         Sheet sheet = wk.createSheet(sheetName);
 24
 25         //创建字体
 26         HSSFFont font_content = wk.createFont();
 27         font_content.setFontName("宋体");
 28         font_content.setFontHeightInPoints((short)12);
 29
 30         //创建样式
 31         CellStyle style_content = wk.createCellStyle();
 32         //水平居中
 33         style_content.setAlignment(HorizontalAlignment.CENTER);
 34         //重直居中
 35         style_content.setVerticalAlignment(VerticalAlignment.CENTER);
 36         //设置字体
 37         style_content.setFont(font_content);
 38
 39         //标题的样式, 样式克隆
 40         CellStyle style_title = wk.createCellStyle();
 41         style_title.cloneStyleFrom(style_content);
 42         HSSFFont font_title = wk.createFont();
 43         font_title.setFontName("黑体");
 44         font_title.setFontHeightInPoints((short)20);
 45         style_title.setFont(font_title);
 46
 47         //设置边框
 48         style_content.setBorderBottom(BorderStyle.THIN);
 49         style_content.setBorderLeft(BorderStyle.THIN);
 50         style_content.setBorderRight(BorderStyle.THIN);
 51         style_content.setBorderTop(BorderStyle.THIN);
 52
 53         //日期样式
 54         HSSFCellStyle style_date = wk.createCellStyle();
 55         style_date.cloneStyleFrom(style_content);
 56         HSSFDataFormat dataFormat = wk.createDataFormat();
 57         style_date.setDataFormat(dataFormat.getFormat("yyyy-MM-dd hh:mm"));
 58
 59
 60         //创建一行,参数指的是: 行的索引=行号-1
 61         Row row = null;
 62         Cell cell = null;
 63         int rowCnt = 10 + orderDetails.size();
 64         for(int i = 2; i < rowCnt; i++){
 65             row = sheet.createRow(i);
 66             for(int j = 0; j < 4; j++){
 67                 cell = row.createCell(j);
 68                 //设置单元格样式
 69                 cell.setCellStyle(style_content);
 70             }
 71         }
 72         //设置日期格式
 73         sheet.getRow(3).getCell(1).setCellStyle(style_date);
 74         sheet.getRow(4).getCell(1).setCellStyle(style_date);
 75         sheet.getRow(5).getCell(1).setCellStyle(style_date);
 76         sheet.getRow(6).getCell(1).setCellStyle(style_date);
 77         //sheet.getRow(3).getCell(1).setCellValue(new Date());
 78
 79         //合并单元格,订单名称
 80         sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));
 81         //供应商名称
 82         sheet.addMergedRegion(new CellRangeAddress(2,2,1,3));
 83         //明细
 84         sheet.addMergedRegion(new CellRangeAddress(7,7,0,3));
 85
 86         //设置header内容
 87         Cell title_cell = sheet.createRow(0).createCell(0);
 88         title_cell.setCellStyle(style_title);
 89         title_cell.setCellValue("采 购 单");
 90         sheet.getRow(2).getCell(0).setCellValue("供应商");
 91
 92         //日期 与 人
 93         row = sheet.getRow(3);
 94         row.getCell(0).setCellValue("下单日期");
 95         row.getCell(2).setCellValue("经办人");
 96         row = sheet.getRow(4);
 97         row.getCell(0).setCellValue("审核日期");
 98         row.getCell(2).setCellValue("经办人");
 99         row = sheet.getRow(5);
100         row.getCell(0).setCellValue("采购日期");
101         row.getCell(2).setCellValue("经办人");
102         row = sheet.getRow(6);
103         row.getCell(0).setCellValue("入库日期");
104         row.getCell(2).setCellValue("经办人");
105
106         sheet.getRow(7).getCell(0).setCellValue("订单明细");
107
108         row = sheet.getRow(8);
109         row.getCell(0).setCellValue("商品名称");
110         row.getCell(1).setCellValue("数量");
111         row.getCell(2).setCellValue("价格");
112         row.getCell(3).setCellValue("金额");
113         //设置行高与列宽
114         //调整行的高度
115         sheet.getRow(0).setHeight((short)1000);
116         for(int i = 2; i < rowCnt; i++){
117             sheet.getRow(i).setHeight((short)500);
118         }
119         //调整列宽
120         for(int i = 0; i < 4; i++){
121             sheet.setColumnWidth(i, 5000);
122         }
123         //写入订单详情
124         sheet.getRow(2).getCell(1).setCellValue(supplierDao.getName(orders.getSupplieruuid()));
125         if(null != orders.getCreatetime()){//下单日期
126             sheet.getRow(3).getCell(1).setCellValue(orders.getCreatetime());
127         }
128         if(null != orders.getChecktime()){//审核日期
129             sheet.getRow(4).getCell(1).setCellValue(orders.getChecktime());
130         }
131         if(null != orders.getStarttime()){//采购日期
132             sheet.getRow(5).getCell(1).setCellValue(orders.getStarttime());
133         }
134         if(null != orders.getEndtime()){//入库日期
135             sheet.getRow(6).getCell(1).setCellValue(orders.getEndtime());
136         }
137         //经办人
138         sheet.getRow(3).getCell(3).setCellValue(empDao.getName(orders.getCreater()));
139         sheet.getRow(4).getCell(3).setCellValue(empDao.getName(orders.getChecker()));
140         sheet.getRow(5).getCell(3).setCellValue(empDao.getName(orders.getStarter()));
141         sheet.getRow(6).getCell(3).setCellValue(empDao.getName(orders.getEnder()));
142
143         //写入明细内容
144         Orderdetail od = null;
145         //rowCnt = 10+size - 9 = 1+size - 1=size
146         for(int i = 9; i < rowCnt - 1; i++){
147             od = orderDetails.get(i-9);
148             row = sheet.getRow(i);
149             row.getCell(0).setCellValue(od.getGoodsname());
150             row.getCell(1).setCellValue(od.getNum());
151             row.getCell(2).setCellValue(od.getPrice());
152             row.getCell(3).setCellValue(od.getMoney());
153         }
154         //合计
155         sheet.getRow(rowCnt - 1).getCell(0).setCellValue("合计");
156         sheet.getRow(rowCnt - 1).getCell(3).setCellValue(orders.getTotalmoney());
157
158         //输出到输出流中
159         try {
160             wk.write(os);
161         } catch (IOException e) {
162             e.printStackTrace();
163         } finally{
164             try {
165                 wk.close();
166             } catch (IOException e) {
167                 e.printStackTrace();
168             }
169         }
170     }
171     

3.action

//思路: 1.导出名字的设置,响应头 //2.service调用
/**
     * 导出订单
     */
    public void exportById(){
        try {
            String filename = String.format("orders_%d.xls", getId());//"orders_" + getId() + ".xls";
            HttpServletResponse res = ServletActionContext.getResponse();
            res.setHeader("Content-Disposition", "attachment;filename=" +
                        new String(filename.getBytes(),"ISO-8859-1"));
            ordersBiz.exportById(ServletActionContext.getResponse().getOutputStream(),getId());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

4.前端

 1 //1.在html 页面导入js 2.在 orders.js中(弹出的dialog中要有导出) 添加导出后按钮
 2 <script type="text/javascript" src="ui/download.js"></script>
 3 var ordersDlgToolbar = new Array();
 4     //添加审核的按钮
 5     if(Request[‘oper‘] == ‘doCheck‘){
 6         ordersDlgToolbar.push({text:‘审核‘,iconCls:‘icon-search‘,handler:doCheck});
 7
 8     }
 9     //添加确认的按钮
10     if(Request[‘oper‘] == ‘doStart‘){
11         ordersDlgToolbar.push({text:‘确认‘,iconCls:‘icon-search‘,handler:doStart});
12     }
13     //导出
14     ordersDlgToolbar.push({text:‘导出‘,iconCls:‘icon-excel‘,handler:function(){
15         $.download("orders_exportById", {id:$(‘#uuid‘).html()});
16     }});
17     //如果有按钮,就把加到窗口里去
18     if(ordersDlgToolbar.length > 0){
19         $(‘#ordersDlg‘).dialog({
20             toolbar:ordersDlgToolbar
21         });
22     }

  

时间: 2024-11-08 10:26:19

java中的excel数据的导入和导出的相关文章

用java实现excel数据批量导入数据库

不管是做软件还是做网站,相信很多人在做的时候都要用到数据库,而数据库的数据从何而来呢,可以使手动添加的,但是大多数情况下我们使用的是已有的数据,我们想借助开发的工具管理目前已有的数据,如果是小量的数据,手动录入也无妨,但是对于大量数据呢,手动录入显然已经不显示,而且,更多的时候,我们呢想在软件上增加一个数据的批量导入,这样不管是谁在用这款软件,都可以方便的管理已有数据,那么我们最常用的数据管理器是什么呢,毫无疑问Excel,但是我们做软件是几乎没有人会使用Excel作为DB,所以我们遇到的问题就

Java代码实现excel数据导入到Oracle

1.首先需要两个jar包jxl.jar,ojdbc.jar(注意版本,版本不合适会报版本错误)2.代码: Java代码   import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl.read.biff.Bi

java把excel数据批量导入到数据库

java把excel数据批量导入到数据库中,java导入excel数据代码如下 1.    public List<Choice> GetFromXls(String xlsname){ 2. 3.        List<Choice> choices = new ArrayList<Choice>(); 4.        Choice choice=null; 5.        try { 6.            java.io.File file=new

使用命令行将Excel数据表导入Mysql中的方法小结

从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高效率,是时候指定一个数据导入的SOP了: 1.准备.txt文件 1.1 将要导入的数据(不含表头)从工作表复制.粘贴到一个新建的Excel数据表中(避免污染源数据) 1.2 粘贴时注意:使用右键paste as value选项,过滤掉源数据表中的多余格式(如,字体颜色.粗体等) 1.3 将新建的Ex

Java中读取Excel功能实现_POI

这里使用apache的poi进行读取excel 1,新建javaproject 项目:TestExcel 2,导入包 包下载地址:http://poi.apache.org/download.html#POI-3.10-FINAL 百度网盘下载:http://pan.baidu.com/s/1i365mQT 导入根目录下.lib.ooxml-lib下的所有jar 4,操作读取excel import java.io.File; import java.io.IOException; import

使用phpExcel实现Excel数据的导入导出(完全步骤)

使用phpExcel实现Excel数据的导入导出(完全步骤) 很多文章都有提到关于使用phpExcel实现Excel数据的导入导出,大部分文章都差不多,或者就是转载的,都会出现一些问题,下面是本人研究phpExcel的使用例程总结出来的使用方法,接下来直接进入正题. 首先先说一下,本人的这段例程是使用在Thinkphp的开发框架上,要是使用在其他框架也是同样的方法,很多人可能不能正确的实现Excel的导入导出,问题基本上都是phpExcel的核心类引用路径出错,如果有问题大家务必要对路劲是否引用

MFC ListControl 与 Excel 数据的导入导出

ListControl View类型选择Report void CExcelTestDlg::OnBnClickedInput() { // TODO: Add your control notification handler code here CFileDialog dlg( TRUE,//TRUE或FALSE.TRUE为打开文件:FALSE为保存文件 _T("xls"), //为缺省的扩展名 _T( "FileList"), //为显示在文件名组合框的编辑框

java中常用的数据加密算法

以下为加密的工具类: import java.io.UnsupportedEncodingException; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.security.PrivateKey; import java.security.PublicKey; impo

oracle中使用impdp数据泵导入数据提示“ORA-31684:对象类型已经存在”错误的解决

转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/47448751 oracle中使用impdp数据泵导入数据时,假设导入之前已经创建了用户,会提示错误:"ORA-31684:对象类型已经存在".如: 事实上这个问题并不严重,能够先不创建用户,导入时指定一个超级用户导入: impdp system/123456@ORCL DIRECTORY=DUMP_EXP DUMPFILE=EXPDATA.DMP remap_sche