JAVA导出EXCEL定制型

       我们在JAVA导出EXCEL通用型 中导出的是通用型的excel。只要是普通类型的都可以用上面的方法。但是一些特别的,需要合并单元格的话通用型的就不可以用了。所以需要我们做特别处理。我们接下来就说下。

1先创建工作簿

HSSFWorkbook workbook = new HSSFWorkbook();

2:准备需要合并的单元格。如果没有合并操作的不用管。

//起始行,结束行,起始列,结束列
CellRangeAddress callRangeAddress = new CellRangeAddress(0, 1, 0, 16);
//标题
CellRangeAddress callRangeAddress11 = new CellRangeAddress(2, 4, 0, 0);//城市名称
CellRangeAddress callRangeAddress12 = new CellRangeAddress(2, 4, 1, 1);//去年批次
CellRangeAddress callRangeAddress13 = new CellRangeAddress(2, 4, 2, 2);//今年批次

CellRangeAddress callRangeAddress21 = new CellRangeAddress(2, 2, 3, 5);//去年数据
CellRangeAddress callRangeAddress22 = new CellRangeAddress(3, 4, 3, 3);//总计
CellRangeAddress callRangeAddress23 = new CellRangeAddress(3, 4, 4, 4);//线上
CellRangeAddress callRangeAddress24 = new CellRangeAddress(3, 4, 5, 5);//线下


CellRangeAddress callRangeAddress31 = new CellRangeAddress(2, 2, 6, 16);//今年数据

CellRangeAddress callRangeAddress32 = new CellRangeAddress(3, 3, 6, 8);//线上与线下

CellRangeAddress callRangeAddress33 = new CellRangeAddress(3, 3, 9, 11);//比率


CellRangeAddress callRangeAddress34 = new CellRangeAddress(3, 3, 12, 16);//关系

//2.创建工作表
HSSFSheet sheet = workbook.createSheet("工作");


//加载合并单元格对象
sheet.addMergedRegion(callRangeAddress);
sheet.addMergedRegion(callRangeAddress11);
sheet.addMergedRegion(callRangeAddress12);
sheet.addMergedRegion(callRangeAddress13);

sheet.addMergedRegion(callRangeAddress21);
sheet.addMergedRegion(callRangeAddress22);
sheet.addMergedRegion(callRangeAddress23);
sheet.addMergedRegion(callRangeAddress24);

sheet.addMergedRegion(callRangeAddress31);
sheet.addMergedRegion(callRangeAddress32);
sheet.addMergedRegion(callRangeAddress33);
sheet.addMergedRegion(callRangeAddress34);

3:准备相应的样式,包括标题,内容等

           //设置首行样式
            HSSFCellStyle headStyle = createCellStyle(workbook, (short) 10, false, true);

            headStyle.setFillForegroundColor((short) 13);// 设置背景色

            //标题样式
            HSSFCellStyle colStyle = createCellStyle(workbook, (short) 10, true, true);

            colStyle.setFillForegroundColor((short) 13);// 设置背景色

            //内容样式
            HSSFCellStyle cellStyle = createCellStyle(workbook, (short) 10, false, true);


            HSSFCellStyle sanStyle = createCellStyle(workbook, (short) 10, false, false);

4:设置标题内容

 //1:设置默认列宽
            sheet.setDefaultColumnWidth(16);
            //2.创建行
            //2.1创建头标题行;并且设置头标题
            HSSFRow row = sheet.createRow(0);
            HSSFCell cell = row.createCell(0);
            //2.2加载单元格样式
            cell.setCellStyle(headStyle);
            cell.setCellValue(time);


            //3.1创建列标题;并且设置列标题
            HSSFRow row2 = sheet.createRow(2);
            String[] titles = {"城市", "去年批次", "今年批次", "去年数据", "今年数据"};//
            for (int i = 0; i < titles.length; i++) {
                int j = i;
                if (i == 4) {
                    j = i + 2;
                    HSSFCell cell2 = row2.createCell(j);
                    //加载单元格样式
                    cell2.setCellStyle(colStyle);
                    cell2.setCellValue(titles[i]);
                } else {
                    HSSFCell cell2 = row2.createCell(j);
                    //加载单元格样式
                    cell2.setCellStyle(colStyle);
                    cell2.setCellValue(titles[i]);
                }

            }

            HSSFRow rowOne = sheet.createRow(3);
            String[] titleOne = {"总计", "线上", "线下"};
            for (int i = 0; i < titleOne.length; i++) {
                int f = i;
                HSSFCell cell21 = rowOne.createCell(f + 3);
                //加载单元格样式
                cell21.setCellStyle(colStyle);
                cell21.setCellValue(titleOne[i]);
            }

            String[] titleSecond = {"线上与线下", "比率", "关系"};
            for (int i = 0; i < titleSecond.length; i++) {
                int j = 0;
                if (i == 0) {
                    j = 6;
                } else if (i == 1) {
                    j = 9;
                } else if (i == 2) {
                    j = 12;
                }
                HSSFCell cell2 = rowOne.createCell(j);
                //加载单元格样式
                cell2.setCellStyle(colStyle);
                cell2.setCellValue(titleSecond[i]);
            }

            HSSFRow rowThird1 = sheet.createRow(4);
            for (int i = 0; i < titleOne.length; i++) {

                HSSFCell cell2 = rowThird1.createCell(i + 6);
                //加载单元格样式
                cell2.setCellStyle(colStyle);
                cell2.setCellValue(titleOne[i]);
            }
            for (int i = 0; i < titleOne.length; i++) {
                HSSFCell cell2 = rowThird1.createCell(i + 9);
                //加载单元格样式
                cell2.setCellStyle(colStyle);
                cell2.setCellValue(titleOne[i]);
            }

            String[] titleThird3 = {"本人", "配偶", "父母", "子女", "其他"};
            for (int i = 0; i < titleThird3.length; i++) {
                HSSFCell cell2 = rowThird1.createCell(i + 12);
                //加载单元格样式
                cell2.setCellStyle(colStyle);
                cell2.setCellValue(titleThird3[i]);
            }

5:将数据写入

 //4.操作单元格;将用户列表写入excel
            if (list!= null) {
                int i = 1;
                for (int j = 0; j < list.size(); j++) {


                    //创建数据行,前面有两行,头标题行和列标题行
                    HSSFRow row3 = sheet.createRow(j + 5);

                    HSSFCell cell1 = row3.createCell(0);
                    cell1.setCellStyle(cellStyle);
                    cell1.setCellValue(EmptyUtils.isNotEmpty(list.get(j).getCity()) ? list.get(j).getCity() : "未知");

               ................

                }
            }

6;最后统计的数据

 //设置统计行
            HSSFRow rownumber = sheet.createRow(cityDtos.size() + 5);
            //创建合并单元格对象
            CellRangeAddress address = new CellRangeAddress(cityDtos.size() + 5, cityDtos.size() + 5, 0, 2);//起始行,结束行,起始列,结束列
            sheet.addMergedRegion(address);
            HSSFCell cellnumber = rownumber.createCell(0);
            //普通的excel
            HSSFCell lastTotalNumber = rownumber.createCell(3);

。。。。。

 //加载单元格样式
            cellnumber.setCellStyle(sanStyle);
            cellnumber.setCellValue("总计");
            
            lastTotalNumber.setCellStyle(sanStyle);
            lastTotalNumber.setCellValue(lastToatl + "");

。。。。

7:最后将excel导出。

 response.setContentType("application/vnd.ms-excel;charset=utf-8");
            response.setCharacterEncoding("utf-8");
            //设置浏览器响应头对应的Content-disposition
            String fileName = time + ".xls";
            response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
            workbook.write(response.getOutputStream());
            response.getOutputStream().close();

结果如下

 

参考:java导出Excel合并单元格

大家好,我是陈亮,JAVA将数据按指定格式导出EXCEL和从EXCEL读相关的内容视频教程1,把poi-2.5.1-final-20040804.jar复制到jdk的classpath下,我这里用的插件是POI我已打好在包中。。我这里JDK装到C:\jdk1.5.0_05\lib 就复制到这里。。先看我演示。。。先演示写出到EXCEL 看到了吧。。。。再演示读EXCEL 这里我是把bb.xls 里面的name:后面的读出来,以及age:后面的读出来。。。看。。。改一下name:后面之后再读...这里文件改为bbc.xls用JCreator方便一点,,所以没用jbuilder OK看到了吧。。。。我再讲解代码写出我已解啦,,,再说读入。。。代码就是这样,,谢谢。。。希望可以和大家共同学习。。。我的msn:ediku@263.net qq:50143539再见...代码在包里。。读入 import org.apache.poi.hssf.usermodel.*;import org.apache.poi.poifs.filesystem.*;import java.io.*;import java.awt.*;import javax.swing.*;import java.awt.event.*;public class read implements ActionListener{JFrame frame; JLabel label1,label2; JTextField tf1,tf2; JButton bu; JPanel panel; public read() { frame=new JFrame("aaaa"); panel=new JPanel(); label1=new JLabel("姓名:"); tf1=new JTextField(10); label2=new JLabel("年龄:"); tf2=new JTextField(10); bu=new JButton("导入"); panel.add(label1); panel.add(tf1); panel.add(label2); panel.add(tf2); panel.add(bu); frame.getContentPane().add(panel); bu.addActionListener(this); frame.setSize(400,400); frame.show(); } /** * @param args */ public static void main(String args[]) { new read(); } public void actionPerformed(ActionEvent e) { if (e.getSource()==bu) { try { // TODO Auto-generated method stub FileInputStream filein=new FileInputStream("bb.xls"); POIFSFileSystem fs=new POIFSFileSystem(filein); HSSFWorkbook wb=new HSSFWorkbook(fs);// POIFSFileSystem fs=new POIFSFileSystem(new Fi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值