澳门网络娱乐游戏平台-澳门电子游戏娱乐网址-官方直营

Java中程导弹入、导出Excel

风姿洒脱、要求介绍

  当前B/S格局已改成应用开拓的主流,而在付出企业管理办公室公室系统的经过中,常常有顾客那样子必要:把系统数据库中的数据导出到Excel,客户查看报表时一贯用Excel打开。可能是:客户已经习贯用Excel打字与印刷,也将供给必得把数量导入到Excel文件。这样在我们实在的费用中,超级多时候须求实现导出Excel的选拔。近年来从网络找到的可比常用的落到实处Java导出Excel的本事有二种POI、JXL、PageOffice,(CSV本领就不研讨了,它只是生成以逗号间距的文本文件)下边小编就深入分析一下这两种方案。

1.POI重视效能

能够操作office文书档案的Java API

主要成效:操作excel文书档案

​ 就算也能够操作word文书档案,但成效相当不佳。Java中并从未能够的word解析技能。

​ 拆解解析word提议使用.net工夫。Java利用WebService能力获得拆解深入分析结果。

​ 为啥要用专门的工作组件来剖析Excel?

澳门官方网站,​ 因为Excel不是两个只有的文本格式。

与其说他excel拆解深入分析技艺的可比:

​ JXL:只可以操作excel2002(以往也能操作二〇〇七-二〇一五了卡塔尔(قطر‎

澳门网络官网网站,​ POI:能够操作整个office(excel,doc,vb宏,ppt,visio卡塔尔国

Java中导入、导出Excel

二、方案深入分析

  POI 是apache的子项目,指标是管理ole2对象,它提供了大器晚成组操纵Windows文书档案的Java API。用于操作Excel格式文件的是HSSF接口,管理MS Excel对象,它不象大家用CSV生成的单独是未有格式的能够由Excel转变的文书文件,而是宪章操作Excel对象,你能够垄断(monopoly卡塔尔国一些属性如sheet,cell等等。HSSF 是Horrible SpreadSheet Format的缩写,翻译过来正是“讨厌的钟表格格式”。 HSSF的名字非常不庄敬,但经过HSSF,你可以用Java代码来改善Excel文件内容。HSSF 为读取操作提供了两类API:usermodel和eventusermodel,即“顾客模型”和“事件-顾客模型”,接口相比抽象,倒霉精通。 

  JXL归于开放源码项目,通过JXL相似能够匡正Excel文件中的数据内容。JXL 由于其精雕细镂 易用的性状, 渐渐已经替代了 POI-excel的地位, 成为更加的多的java开辟人士生成excel文件的首推。JXL的天性:协助Excel 二零零二正经格式、帮忙字体、数字、日期格式化操作 、帮衬对单元格加影子和加色彩、比POI越来越小更省里部存款和储蓄器。这个功用能够大要满意客户的雷同供给。

  PageOffice封装Office VBA接口为Java调用的Excel简化对象模型,指的是截然用Java达成的后生可畏组Excel存取对象,便于服务器端Java代码直接调用。那套对象模型不是简约地模仿Excel的VBA对象接口,而是从开垦者常用的编制程序代码角度,结合数据库数据访谈的风味抽象出的黄金时代套实用、调用轻易的目的库,把本来复杂的Excel读写操作轻松化了,相同的时候减轻了Excel文件的在线张开难点,客商能够直接在网页中查阅和编辑Excel,无需繁缛的上传下载操作。

  篇幅有限,也为了节约我们的读书时间,下边只谈谈相对相比较好的PageOffice方案。

  用PageOffice能够用轻巧调用形式生成Excel文件,也得以用高级调用形式变通。不难调用方式是指在Excel模板文件中先安装好全部的表格样式,开采的时候只是编写代码给Excel模板填充数据就可以,此办法编写的代码量最少,效果并不差,那也是PageOffice推荐的调用方式;高端调用情势得以兑今后三个空荡荡的Excel文件中生成很雅观的表格(甚至给单元格赋值公式),不过编制程序的职业量就大概了。

2.POI支持的解析方法

  • HSSF解析(.xls Excel97-03版本)

  • XSSF解析(.xlsx Excel07-16版本)

    深入分析方法各异,是出于两类版本excel文件本身的兑现存例外

 

三、轻易调用格局

*  *1. 制作excel模板:

  澳门网络官网网站 1

  2. 编辑代码:

    PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
    poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); 
    //定义Workbook对象
    Workbook workBook = new Workbook();
    //定义Sheet对象,"Sheet1"是打开的Excel表单的名称
    Sheet sheet = workBook.openSheet("Sheet1");
    //定义Table对象
    Table table = sheet.openTable("B4:F13");
    for(int i=0; i < 50; i++)
    { 
        table.getDataFields().get(0).setValue("产品 " + i);
        table.getDataFields().get(1).setValue("100");
        table.getDataFields().get(2).setValue(String.valueOf(100+i));
        table.nextRow();
    }
    table.close();

    poCtrl1.setWriter(workBook);
    //打开Excel文件
    poCtrl1.webOpen("doc/test.xls", OpenModeType.xlsNormalEdit, "张三");

  3. 生成文件的功效:

  澳门网络官网网站 2

3.应用处景

  • 导入excel数据

    ​ 将excel中的备份数据复苏到数据库

  • 导出excel数据

    ​ 将数据库中的数据导出或备份

一、介绍

四、高等调用形式

  1. 编码生成Excel

    Workbook wb = new Workbook();
    // 设置背景
    Table backGroundTable = wb.openSheet("Sheet1").openTable("A1:P200");
    backGroundTable.getBorder().setLineColor(Color.white);

    // 设置标题
    wb.openSheet("Sheet1").openTable("A1:H2").merge();
    wb.openSheet("Sheet1").openTable("A1:H2").setRowHeight(30);
    Cell A1 = wb.openSheet("Sheet1").openCell("A1");
    A1.setHorizontalAlignment(XlHAlign.xlHAlignCenter);
    A1.setVerticalAlignment(XlVAlign.xlVAlignCenter);
    A1.setForeColor(new Color(0, 128, 128));
    A1.setValue("出差开支预算");

    //设置字体
    wb.openSheet("Sheet1").openTable("A1:A1").getFont().setBold(true);
    wb.openSheet("Sheet1").openTable("A1:A1").getFont().setSize(25);

    // 画表头    
    Border C4Border = wb.openSheet("Sheet1").openTable("C4:C4").getBorder();
    C4Border.setWeight(XlBorderWeight.xlThick);
    C4Border.setLineColor(Color.yellow);

    Table titleTable = wb.openSheet("Sheet1").openTable("B4:H5");
    titleTable.getBorder().setBorderType(XlBorderType.xlAllEdges);
    titleTable.getBorder().setWeight(XlBorderWeight.xlThick);
    titleTable.getBorder().setLineColor(new Color(0, 128, 128));

    // 画表体
    Table bodyTable = wb.openSheet("Sheet1").openTable("B6:H15");
    bodyTable.getBorder().setLineColor(Color.gray);
    bodyTable.getBorder().setWeight(XlBorderWeight.xlHairline);

    Border B7Border = wb.openSheet("Sheet1").openTable("B7:B7").getBorder();
    B7Border.setLineColor(Color.white);

    Border B9Border = wb.openSheet("Sheet1").openTable("B9:B9").getBorder();
    B9Border.setBorderType(XlBorderType.xlBottomEdge);
    B9Border.setLineColor(Color.white);

    Border C6C15BorderLeft = wb.openSheet("Sheet1").openTable("C6:C15").getBorder();
    C6C15BorderLeft.setLineColor(Color.white);
    C6C15BorderLeft.setBorderType(XlBorderType.xlLeftEdge);

    Border C6C15BorderRight = wb.openSheet("Sheet1").openTable("C6:C15").getBorder();
    C6C15BorderRight.setLineColor(Color.yellow);
    C6C15BorderRight.setLineStyle(XlBorderLineStyle.xlDot);
    C6C15BorderRight.setBorderType(XlBorderType.xlRightEdge);

    Border E6E15Border = wb.openSheet("Sheet1").openTable("E6:E15").getBorder();
    E6E15Border.setLineStyle(XlBorderLineStyle.xlDot);
    E6E15Border.setBorderType(XlBorderType.xlAllEdges);
    E6E15Border.setLineColor(Color.yellow);

    Border G6G15BorderRight = wb.openSheet("Sheet1").openTable("G6:G15").getBorder();
    G6G15BorderRight.setBorderType(XlBorderType.xlRightEdge);
    G6G15BorderRight.setLineColor(Color.white);

    Border G6G15BorderLeft = wb.openSheet("Sheet1").openTable("G6:G15").getBorder();
    G6G15BorderLeft.setLineStyle(XlBorderLineStyle.xlDot);
    G6G15BorderLeft.setBorderType(XlBorderType.xlLeftEdge);
    G6G15BorderLeft.setLineColor(Color.yellow);

    Table bodyTable2 = wb.openSheet("Sheet1").openTable("B6:H15");
    bodyTable2.getBorder().setWeight(XlBorderWeight.xlThick);
    bodyTable2.getBorder().setLineColor(new Color(0, 128, 128));
    bodyTable2.getBorder().setBorderType(XlBorderType.xlAllEdges);

    // 画表尾
    Border H16H17Border = wb.openSheet("Sheet1").openTable("H16:H17").getBorder();
    H16H17Border.setLineColor(new Color(204, 255, 204));

    Border E16G17Border = wb.openSheet("Sheet1").openTable("E16:G17").getBorder();
    E16G17Border.setLineColor(new Color(0, 128, 128));

    Table footTable = wb.openSheet("Sheet1").openTable("B16:H17");
    footTable.getBorder().setWeight(XlBorderWeight.xlThick);
    footTable.getBorder().setLineColor(new Color(0, 128, 128));
    footTable.getBorder().setBorderType(XlBorderType.xlAllEdges);

    // 设置行高列宽
    wb.openSheet("Sheet1").openTable("A1:A1").setColumnWidth(1);
    wb.openSheet("Sheet1").openTable("B1:B1").setColumnWidth(20);
    wb.openSheet("Sheet1").openTable("C1:C1").setColumnWidth(15);
    wb.openSheet("Sheet1").openTable("D1:D1").setColumnWidth(10);
    wb.openSheet("Sheet1").openTable("E1:E1").setColumnWidth(8);
    wb.openSheet("Sheet1").openTable("F1:F1").setColumnWidth(3);
    wb.openSheet("Sheet1").openTable("G1:G1").setColumnWidth(12);
    wb.openSheet("Sheet1").openTable("H1:H1").setColumnWidth(20);

    wb.openSheet("Sheet1").openTable("A16:A16").setRowHeight(20);
    wb.openSheet("Sheet1").openTable("A17:A17").setRowHeight(20);

    // 设置表格中字体大小为10
    for (int i = 0; i < 12; i++) {//excel表格行号
        for (int j = 0; j < 7; j++) {//excel表格列号
            wb.openSheet("Sheet1").openCellRC(4 + i, 2 + j).getFont().setSize(10);
        }
    }

    // 填充单元格背景颜色
    for (int i = 0; i < 10; i++) {
        wb.openSheet("Sheet1").openCell("H" + (6 + i)).setBackColor(new Color(255, 255, 153));
    }

    wb.openSheet("Sheet1").openCell("E16").setBackColor(new Color(0, 128, 128));
    wb.openSheet("Sheet1").openCell("F16").setBackColor(new Color(0, 128, 128));
    wb.openSheet("Sheet1").openCell("G16").setBackColor(new Color(0, 128, 128));
    wb.openSheet("Sheet1").openCell("E17").setBackColor(new Color(0, 128, 128));
    wb.openSheet("Sheet1").openCell("F17").setBackColor(new Color(0, 128, 128));
    wb.openSheet("Sheet1").openCell("G17").setBackColor(new Color(0, 128, 128));
    wb.openSheet("Sheet1").openCell("H16").setBackColor(new Color(204, 255, 204));
    wb.openSheet("Sheet1").openCell("H17").setBackColor(new Color(204, 255, 204));

    //填充单元格文本和公式
    Cell B4 = wb.openSheet("Sheet1").openCell("B4");
    B4.getFont().setBold(true);
    B4.setValue("出差开支预算");
    Cell H5 = wb.openSheet("Sheet1").openCell("H5");
    H5.getFont().setBold(true);
    H5.setValue("总计");
    H5.setHorizontalAlignment(XlHAlign.xlHAlignCenter);
    Cell B6 = wb.openSheet("Sheet1").openCell("B6");
    B6.getFont().setBold(true);
    B6.setValue("飞机票价");
    Cell B9 = wb.openSheet("Sheet1").openCell("B9");
    B9.getFont().setBold(true);
    B9.setValue("酒店");
    Cell B11 = wb.openSheet("Sheet1").openCell("B11");
    B11.getFont().setBold(true);
    B11.setValue("餐饮");
    Cell B12 = wb.openSheet("Sheet1").openCell("B12");
    B12.getFont().setBold(true);
    B12.setValue("交通费用");
    Cell B13 = wb.openSheet("Sheet1").openCell("B13");
    B13.getFont().setBold(true);
    B13.setValue("休闲娱乐");
    Cell B14 = wb.openSheet("Sheet1").openCell("B14");
    B14.getFont().setBold(true);
    B14.setValue("礼品");
    Cell B15 = wb.openSheet("Sheet1").openCell("B15");
    B15.getFont().setBold(true);
    B15.getFont().setSize(10);
    B15.setValue("其他费用");

    wb.openSheet("Sheet1").openCell("C6").setValue("机票单价(往)");
    wb.openSheet("Sheet1").openCell("C7").setValue("机票单价(返)");
    wb.openSheet("Sheet1").openCell("C8").setValue("其他");
    wb.openSheet("Sheet1").openCell("C9").setValue("每晚费用");
    wb.openSheet("Sheet1").openCell("C10").setValue("其他");
    wb.openSheet("Sheet1").openCell("C11").setValue("每天费用");
    wb.openSheet("Sheet1").openCell("C12").setValue("每天费用");
    wb.openSheet("Sheet1").openCell("C13").setValue("总计");
    wb.openSheet("Sheet1").openCell("C14").setValue("总计");
    wb.openSheet("Sheet1").openCell("C15").setValue("总计");

    wb.openSheet("Sheet1").openCell("G6").setValue("  张");
    wb.openSheet("Sheet1").openCell("G7").setValue("  张");
    wb.openSheet("Sheet1").openCell("G9").setValue("  晚");
    wb.openSheet("Sheet1").openCell("G10").setValue("  晚");
    wb.openSheet("Sheet1").openCell("G11").setValue("  天");
    wb.openSheet("Sheet1").openCell("G12").setValue("  天");

    wb.openSheet("Sheet1").openCell("H6").setFormula("=D6*F6");
    wb.openSheet("Sheet1").openCell("H7").setFormula("=D7*F7");
    wb.openSheet("Sheet1").openCell("H8").setFormula("=D8*F8");
    wb.openSheet("Sheet1").openCell("H9").setFormula("=D9*F9");
    wb.openSheet("Sheet1").openCell("H10").setFormula("=D10*F10");
    wb.openSheet("Sheet1").openCell("H11").setFormula("=D11*F11");
    wb.openSheet("Sheet1").openCell("H12").setFormula("=D12*F12");
    wb.openSheet("Sheet1").openCell("H13").setFormula("=D13*F13");
    wb.openSheet("Sheet1").openCell("H14").setFormula("=D14*F14");
    wb.openSheet("Sheet1").openCell("H15").setFormula("=D15*F15");

    for (int i = 0; i < 10; i++) {
        //设置数据以货币形式显示
        wb.openSheet("Sheet1").openCell("D" + (6 + i)).setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
        wb.openSheet("Sheet1").openCell("H" + (6 + i)).setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
    }

    Cell E16 = wb.openSheet("Sheet1").openCell("E16");
    E16.getFont().setBold(true);
    E16.getFont().setSize(11);
    E16.setForeColor(Color.white);
    E16.setValue("出差开支总费用");
    E16.setVerticalAlignment(XlVAlign.xlVAlignCenter);
    Cell E17 = wb.openSheet("Sheet1").openCell("E17");
    E17.getFont().setBold(true);
    E17.getFont().setSize(11);
    E17.setForeColor(Color.white);
    E17.setFormula("=IF(C4>H16,"低于预算","超出预算")");
    E17.setVerticalAlignment(XlVAlign.xlVAlignCenter);
    Cell H16 = wb.openSheet("Sheet1").openCell("H16");
    H16.setVerticalAlignment(XlVAlign.xlVAlignCenter);
    H16.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
    H16.getFont().setName("Arial");
    H16.getFont().setSize(11);
    H16.getFont().setBold(true);
    H16.setFormula("=SUM(H6:H15)");
    Cell H17 = wb.openSheet("Sheet1").openCell("H17");
    H17.setVerticalAlignment(XlVAlign.xlVAlignCenter);
    H17.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
    H17.getFont().setName("Arial");
    H17.getFont().setSize(11);
    H17.getFont().setBold(true);
    H17.setFormula("=(C4-H16)");

    // 填充数据
    Cell C4 = wb.openSheet("Sheet1").openCell("C4");
    C4.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
    C4.setValue("2500");
    Cell D6 = wb.openSheet("Sheet1").openCell("D6");
    D6.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
    D6.setValue("1200");
    wb.openSheet("Sheet1").openCell("F6").getFont().setSize(10);
    wb.openSheet("Sheet1").openCell("F6").setValue("1");
    Cell D7 = wb.openSheet("Sheet1").openCell("D7");
    D7.setNumberFormatLocal("¥#,##0.00;¥-#,##0.00");
    D7.setValue("875");
    wb.openSheet("Sheet1").openCell("F7").setValue("1");

    //打开文件
    PageOfficeCtrl poCtrl1 = new PageOfficeCtrl(request);
    poCtrl1.setWriter(wb);
    poCtrl1.setServerPage(request.getContextPath()+"/poserver.zz"); 
    poCtrl1.webOpen("doc/test.xls", OpenModeType.xlsNormalEdit, "");

  2. 生成Excel的效果:

  澳门网络官网网站 3

4. 高效入门:

  当前B/S形式已产生应用开辟的主流,而在商铺办公系统中,经常有顾客那样子要求:你要把大家的表格直接用Excel展开(电信系统、银行连串)。只怕是:大家曾经习于旧贯用Excel打字与印刷。那样在我们实际的支出中,超级多时候要求得以完成导入、导出Excel的使用。

五、源码下载

*  1. *访问: for Java;

  2. 解压PageOffice开拓包,拷贝萨姆ples4文本夹到汤姆cat的Webapps目录下,访谈:

  3. 查看示例:生龙活虎、23、对Excel中的一块区域赋值,并自行扩大行;三、8、完全编制程序完结动态生成Excel文件

Maven坐标

<!--操作97-03版本用-->
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi</artifactId> 
    <version>3.11</version> 
</dependency>
<!--操作07-16版本用-->
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml</artifactId> 
    <version>3.11</version> 
</dependency>
<!--?-->
<dependency> 
    <groupId>org.apache.poi</groupId> 
    <artifactId>poi-ooxml-schemas</artifactId> 
    <version>3.11</version> 
</dependency>

  最近,相比较常用的达成Java导入、导出Excel的技巧有三种Jakarta POI和Java Excel

达成步骤:

  1. 成立职业簿
  2. 创建sheet
  3. 创立行对象
  4. 创办单元格对象
  5. 安装剧情
  6. 安装剧情格式
    ​ 使用wb去创制内容格式,是出于创设出的书体是在劳作簿内公共使用的。
    1. 安装字体
    2. 安装字体大小
    3. 创建cellStyle
    4. 将cellStyle赋给cell
  7. 将 专门的学问簿写入输出流
  8. 下载

  上面作者就各自授课一下什么样行使那四个手艺实现导入、导出Excel

简单Demo:

package cn.itcast.jx.poi;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;

public class POITest {

    @SuppressWarnings("resource")
    public static void main(String[] args) throws Exception {
        //1 创建工作薄:Workbook是一个接口,它有一个实现类HSSFWorkbook对象,这个对象专门操作excel97-03,excel的后缀名是xls
        Workbook wb = new HSSFWorkbook();
        //2 创建工作表sheet:工作表
        Sheet sheet = wb.createSheet();
        //3 创建行对象,java中从0开始计数
        Row row = sheet.createRow(3);
        //4 创建列对象
        Cell cell = row.createCell(3);
        //5 设置内容
        cell.setCellValue("itcast,一统江湖");
        //6 设置内容格式
        Font font = wb.createFont();
        font.setFontHeightInPoints((short)24);//以像素点的方式设置字体大小
        font.setFontName("华文彩云");//设置字体

        //System.out.println(Short.MIN_VALUE+"-"+Short.MAX_VALUE);
        //创建格式
        CellStyle cellStyle = wb.createCellStyle();
        cellStyle.setFont(font);

        //将cellStyle给cell
        cell.setCellStyle(cellStyle);
        //7 保存(javase项目采用保存)
        FileOutputStream stream = new FileOutputStream(new File("d://a.xls"));
        wb.write(stream);//将对象写进流

        stream.flush();
        stream.close();
        //8 下载(web项目 才有下载)
        System.out.println("运行结束");
    }
}
二、使用Jakarta POI导入、导出Excel

花色利用德姆o:出货单打字与印刷:

package cn.itcast.jx.action.cargo;

import java.io.ByteArrayOutputStream;
import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.struts2.ServletActionContext;
import org.hibernate.type.descriptor.sql.BitTypeDescriptor;

import cn.itcast.jx.action.BaseAction;
import cn.itcast.jx.domain.ContractProduct;
import cn.itcast.jx.service.ContractProductService;
import cn.itcast.jx.util.DownloadUtil;
import cn.itcast.jx.util.UtilFuns;
/**
 * 打印出货表:选择时间(船期)
 */
public class OutProductAction extends BaseAction {
    //获取页面提交的打印月份
    private String inputDate;

    public String getInputDate() {
        return inputDate;
    }
    public void setInputDate(String inputDate) {
        this.inputDate = inputDate;
    }
    //跳转到打印页面
    public String toedit() throws Exception {
        return "toedit";
    }
    //依赖注入
    private ContractProductService contractProductService;

    public void setContractProductService(
            ContractProductService contractProductService) {
        this.contractProductService = contractProductService;
    }
    //打印excel文档:
    @SuppressWarnings("resource")
    public String print() throws Exception {
        //创建工作表
        Workbook wb = new HSSFWorkbook();
        //创建工作表
        Sheet sheet = wb.createSheet();

        //设置列宽
        sheet.setColumnWidth(0, 6*256);
        sheet.setColumnWidth(1, 26*256);
        sheet.setColumnWidth(2, 12*256);
        sheet.setColumnWidth(3, 30*256);
        sheet.setColumnWidth(4, 12*256);
        sheet.setColumnWidth(5, 15*256);
        sheet.setColumnWidth(6, 10*256);
        sheet.setColumnWidth(7, 10*256);
        sheet.setColumnWidth(8, 10*256);

      //定义一些公共变量
        //行对象
        Row nRow = null;
        //单元格对象
        Cell nCell = null;  
        //行号和列号
        int rowNo = 0;
        int cellNo = 1;

        /************大标题的打印**************/
        nRow = sheet.createRow(rowNo);
        nCell = nRow.createCell(cellNo);
        //横向合并单元格
        sheet.addMergedRegion(new CellRangeAddress(0,0,1,8));

        //设置内容:
        //设置内容:
        /**
         * 2012-01:
         * 2012-10:
         * 
         * 方式一:inputDate.replace("-0","-").replace("-","年")
         * 方式二:inputDate.replace("-0","年").replace("-","年")
         * 
         */
        nCell.setCellValue(inputDate.replace("-0","-").replace("-","年")+"月出货表");

        //行高?样式?
        nRow.setHeightInPoints(36f);
        nCell.setCellStyle(bigTitle(wb));

        /************小标题的打印**************/
        //先换行
        rowNo++;
        //创建行对象
        nRow = sheet.createRow(rowNo);

        String[] titles = {"客户","订单号","货号","数量","工厂","工厂交期","船期","贸易条款"};
        //遍历标题,进行输出打印
        for(String title:titles){
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(title);
            nCell.setCellStyle(title(wb));
        }

        /************内容的打印**************/
        //准备数据
        //String hql = "from ContractProduct where contract.shipTime like '%"+inputDate+"%'";//mysql支持,oracle不支持
        //hql中有to_char函数吗?没有,这是oracle中的pl/sql函数
        //但是,hibernate强大的地方就在:你可以在HQL中使用数据库中的函数
        String hql = "from ContractProduct where to_char(contract.shipTime,'yyyy-mm') = '"+inputDate+"'";//oracle支持
        //查询:
        List<ContractProduct> list = contractProductService.find(hql, ContractProduct.class, null);

        //将数据放入sheet中
        for(ContractProduct cp:list){
            //行变化
            rowNo++;
            nRow = sheet.createRow(rowNo);
            //列
            cellNo = 1;//规1

            //"客户",
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(cp.getContract().getCustomName());
            nCell.setCellStyle(text(wb));

            //"订单号",
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(cp.getContract().getContractNo());
            nCell.setCellStyle(text(wb));
            //"货号",
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(cp.getProductNo());
            nCell.setCellStyle(text(wb));
            //"数量",
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(cp.getCnumber());
            nCell.setCellStyle(text(wb));
            //"工厂",
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(cp.getFactoryName());
            nCell.setCellStyle(text(wb));
            //"工厂交期",
            nCell = nRow.createCell(cellNo++);
            //用SimpleDateFormat也行
            nCell.setCellValue(UtilFuns.dateTimeFormat(cp.getContract().getDeliveryPeriod()));
            nCell.setCellStyle(text(wb));
            //"船期",
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(UtilFuns.dateTimeFormat(cp.getContract().getShipTime()));
            nCell.setCellStyle(text(wb));
            //"贸易条款"
            nCell = nRow.createCell(cellNo++);
            nCell.setCellValue(cp.getContract().getTradeTerms());
            nCell.setCellStyle(text(wb));

        }


        /************下载**************/
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        //将内容写入流
        wb.write(byteArrayOutputStream);
        //使用流
        DownloadUtil downloadUtil = new DownloadUtil();

        HttpServletResponse response = ServletActionContext.getResponse();

        /**
         * 第一个:文件流
         * 第二个:response
         * 第三个:下载的文件的名字
         */
        downloadUtil.download(byteArrayOutputStream, response, "itcast.xls");

        return NONE;
    }
    //大标题的样式
    public CellStyle bigTitle(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("宋体");
        font.setFontHeightInPoints((short)16);
        font.setBoldweight(Font.BOLDWEIGHT_BOLD);                   //字体加粗

        style.setFont(font);

        style.setAlignment(CellStyle.ALIGN_CENTER);                 //横向居中
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);      //纵向居中

        return style;
    }
    //小标题的样式
    public CellStyle title(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("黑体");
        font.setFontHeightInPoints((short)12);

        style.setFont(font);

        style.setAlignment(CellStyle.ALIGN_CENTER);                 //横向居中
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);      //纵向居中

        style.setBorderTop(CellStyle.BORDER_THIN);                  //上细线
        style.setBorderBottom(CellStyle.BORDER_THIN);               //下细线
        style.setBorderLeft(CellStyle.BORDER_THIN);                 //左细线
        style.setBorderRight(CellStyle.BORDER_THIN);                //右细线

        return style;
    }

    //文字样式
    public CellStyle text(Workbook wb){
        CellStyle style = wb.createCellStyle();
        Font font = wb.createFont();
        font.setFontName("Times New Roman");
        font.setFontHeightInPoints((short)10);

        style.setFont(font);

        style.setAlignment(CellStyle.ALIGN_LEFT);                   //横向居左
        style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);      //纵向居中

        style.setBorderTop(CellStyle.BORDER_THIN);                  //上细线
        style.setBorderBottom(CellStyle.BORDER_THIN);               //下细线
        style.setBorderLeft(CellStyle.BORDER_THIN);                 //左细线
        style.setBorderRight(CellStyle.BORDER_THIN);                //右细线

        return style;
    }
}

  Jakarta POI 是意气风发套用于访谈微软格式文书档案的Java API。Jakarta POI有众多组件组成,当中有用于操作Excel格式文件的HSSF和用来操作Word的HWPF,在种种零器件中近来唯有用于操作Excel的HSSF相对成熟。官方主页,API文档

5.行使模板的达成

​ 模板便是叁个已经安装好有的样式的excel文书档案。
​ 标题行,列宽行高,字体颜色等得以在模板中先安装好。

2.1 情形安排

步骤

  1. 塑造模板文件

  2. 读取模板文件,获取职业簿

    //路径
    String path = ServletActionContext.getRequest().getRealPath("/");
    path += "/make/xlsprint/tOUTPRODUCT.xls";
    //输入流
    FileInputStream is = new FileInputStream(new File(path));    
    //借助模板创建工作簿
    Workbook wb = new HSSFWorkbook(is);
    
  3. 获取sheet

    Sheet sheet = wb.getSheetAt(0);
    
  4. 获取行

  5. 拿到某单元格的格式

    CellStyle customerCellStyle = nRow.getCell(cellNo++).getCellStyle();
    
  6. 安装剧情及格式

  7. 将职业簿写入输出流

  8. 下载

  2.1.1下载jar

  官方下载:这里能够下载到它的风行版本和文档,前段时间风行版本是3.7,这里运用比较稳固的3.6版。

本文由澳门网络娱乐游戏平台发布于编程,转载请注明出处:Java中程导弹入、导出Excel

相关阅读