目前市场上有很多的excel的处理工具,poi、jxl、java2word等等,在制作excel上面,我用了这么多插件里面,做的最全面的就是jxcell了。poi也可以做,但更适合其他类型文档,ppt,word等。

缺点:

网上使用很少,资料很少,api文档虽然有,但是很多地方都非常的含糊,不知道属性具体用处是什么。

优点:

可以调用excel自带的公式及语法。生成对应的数据以及图表,这些poi等插件是无法做到的。

由于毕竟是工作时写的,我只能分享部分设计

1.设置sheet页

View m_view = new View();

/**
     * 设置页签
     * @param m_view
     * @throws CellException
     */
    private void settingExcelSheet(View m_view,String name) throws CellException {
        //设置sheet页数
        m_view.setNumSheets(3);
        //设置sheet页的名称
        m_view.setSheetName(0,name);
        m_view.setSheetName(1,"sheet1");
        m_view.setSheetName(2,"sheet2");
    }

2.设置设置表格,并设置相关样式

/**
     * 写入第三个数据页签
     * @param m_view
     * @return
     * @throws CellException
     */
    public static void writeThridSheetInfo(View m_view, List<String> dateList, 
            List<String> netWorstList)
            throws Exception {
        m_view.setSheet(2);

//标题 setTextAsValue(行,列,值);
        m_view.setTextAsValue(0,0,"日期");
        m_view.setTextAsValue(0,1,"客户");
        m_view.setDefaultFont("Dengxian",-12);//设置默认字体和字体大小
        m_view.setDefaultRowHeight(445);//设定默认单元格行高
        m_view.setColWidth(0, 1, 5280, false);
        //m_view.setDefaultColWidth(5300);//设定默认单元格行宽
        //m_view.setColWidth(0, 3000);//设置第一列的自定义单元格行宽
        
        //设置样式格式
        ConditionFormat condfmt[]=new ConditionFormat[1];
        condfmt[0] = m_view.CreateConditionFormat();
        
        //设置公式,区域
        CellFormat cellFormat = ExcelUtil.settingCellStyle(condfmt, new Color(129,0,0).getRGB(), Color.BLACK.getRGB(), 
                Color.WHITE.getRGB(), (short)1,true,false,12);
        
        //设置那些行和列需要使用这个配置
        condfmt[0].setCellFormat(cellFormat);
        m_view.setSelection(0, 0, 0, 1);//设定背景色位置   第一个第二个参数定位起始点  第三个参数定位多少行  第四个参数定位多少列 
        m_view.setConditionalFormats(condfmt);
        
        m_view.setCellFormat(cellFormat, 0, 0, 0, 1);
        
        //设置时间列,和数据列
        for(int i=0;i<dateList.size();i++){
            m_view.setText(i+1,0,dateList.get(i));//文本格式
            m_view.setTextAsValue(i+1,1,CalcUtil.saveFourPoint(netWorstList.get(i)));//会根据你的数据类型转变格式
        }
        
        //设置数据第一列的靠齐方式
        condfmt[0] = m_view.CreateConditionFormat();
        //设置公式,区域
        CellFormat cellFormat2=condfmt[0].getCellFormat();
        cellFormat2.setHorizontalAlignment(CellFormat.HorizontalAlignmentLeft);
        m_view.setCellFormat(cellFormat2, 1, 0, dateList.size(), 0);
    }

3.设置格式的通用设置类,我只列举了一部分,其他的可以看api文档,不过确实难看

/**
     * 设置通用样式
     * @param condfmt
     * @param color
     * @return
     * @throws Exception
     */
    public static CellFormat settingCellStyle(ConditionFormat[] condfmt,
            int backgroundColor,int borderColor,int fontColor,
            short size,boolean isblod,boolean isMerge,int fontSize)
            throws Exception {
        CellFormat cellFormat=condfmt[0].getCellFormat();
        condfmt[0].setType(ConditionFormat.TypeFormula);
        condfmt[0].setFormula1("true", 0, 0);
        
        //设置背景颜色
        cellFormat.setPattern((short)1);
        cellFormat.setFontSize(fontSize);
        cellFormat.setPatternFG(backgroundColor);//设置背景颜色
        
        //设置字体颜色大小
        cellFormat.setFontSize(fontSize);
        cellFormat.setFontName("微软雅黑");
        cellFormat.setFontBold(isblod);//设置是否展示粗体
        cellFormat.setFontColor(fontColor);
        cellFormat.setFontItalic(false);
        
        //设置是否合并
        cellFormat.setMergeCells(isMerge);
        
        //设置边框样式
        cellFormat.setBottomBorder(size);
        cellFormat.setBottomBorderColor(borderColor);
        cellFormat.setRightBorder(size);
        cellFormat.setRightBorderColor(borderColor);
        
        //设置字体展示位置
        cellFormat.setHorizontalAlignment(CellFormat.HorizontalAlignmentCenter);
        cellFormat.setVerticalAlignment(CellFormat.VerticalAlignmentCenter );
        return cellFormat;
    }

4.设置饼状图

/**
     * 设置饼状图
     * @param m_view
     * @param rowNum 当前行数
     * @param count你选择的数据有几行
     * @param name 你这个sheet页的名称
     * @throws Exception
     */
    private static void settingFoldPieChart(View m_view, int rowNum, int count,String name) throws Exception {
        //绘图区坐标addChart(左上列x,左上行y,右下列x,右下行y)
        ChartShape chart = m_view.addChart(8, rowNum, 16, rowNum+9+0.5);
        //图标形式
        chart.setChartType(ChartShape.TypePie);
        chart.set3Dimensional(true);
        //设置连接区域
         // 添加一个系列
        chart.addSeries();
        // 饼图数据源,饼图需要的具体数字,不包含总数,参数为 开始单元格结束单元格
        chart.setSeriesYValueFormula(0, name+"!$G$"+(rowNum+2)+":$G$"+(rowNum+count+1));//从G列的第几行到第几行,设置数据
        // 数据对应的说明.如:货车  12辆,这里是货车
        chart.setCategoryFormula(name+"!$B$"+(rowNum+2)+":$B$"+(rowNum+count+1));//从b列的第几行到几行,设置名称
        
        // 设置列宽行高
        m_view.setColWidth(1, 18 * 256);
        // 设置图纸样式, 参照各种Format类
        ChartFormat cf = chart.getChartFormat();
        chart.setChartFormat(cf);
        // 设置绘图区颜色
        cf = chart.getPlotFormat();
        chart.setPlotFormat(cf);
        // 展示图饼文字描述
        cf = chart.getSeriesFormat(0);
        cf.setFontBold(true);
        cf.setDataLabelPosition((short)6);//设置饼状图数据展示
        cf.setDataLabelTypes(6);//设置饼状图样式
        chart.setSeriesFormat(0, cf);

// 设置图饼分块颜色
        chart.setVaryColors(true);

// 设置标题字体格式
        cf = chart.getTitleFormat();
        cf.setFontBold(true);
        cf.setFontSize(20 * 20);
        chart.setTitleFormat(cf);
        //图利位置
          chart.setLegendVisible(false);
        // 图表刻印样式, 取消图饼边框显示
        cf = chart.getLegendFormat();
        cf.setLineNone();
        cf.setFontSizeInPoints(13);
        chart.setLegendFormat(cf);
    }

5.设置折线图

/**
     * 设置折线图
     * @param m_view
     * @param rowNum 行数
     * @param maxData最大值
     * @param minData最小值
     * @param dateList
     * @throws Exception
     * @throws CellException
     */
    private static void settingFoldLineChart(View m_view, List<String> dateList,int rowNum, 
            StringBuilder maxData, StringBuilder minData)
            throws Exception, CellException {
        //绘图区坐标addChart(左上列x,左上行y,右下列x,右下行y)
        ChartShape chart = m_view.addChart(8, rowNum+1, 16, rowNum+10);
        //图标形式
        chart.setChartType(ChartShape.TypeLine);
        /*
            TypeBar:横向柱状图
            TypePie:饼状图
            TypeLine:线状图
            TypeArea:面积图
            TypeDoughnut:圈图
            TypeScatter:线点图
            TypeBubble:没怎么看懂,就是一个灰图,不过查阅资料,貌似是泡状图
        */
        
        //设置连接区域
        chart.setLinkRange("sheet2!$A$1", false);
        
        //添加一个系列
        chart.addSeries();
        //系列名字
        chart.setSeriesName(0, "sheet2!$B$1");
        //系列值
        chart.setSeriesYValueFormula(0, "sheet2!$B$2:$B$"+(dateList.size()+1));
        //系列分类
        chart.setCategoryFormula("sheet2!$A$2:$A$"+(dateList.size()+1));
        chart.setTitle("title");
        
        //设置图表样式
        ChartFormat cf = chart.getChartFormat();
        
        //设置背景色
        cf.setPattern((short)1);
        cf.setPatternFG(Color.WHITE.getRGB());
        cf.setLineColor((new Color(224, 224, 224)).getRGB());
        chart.setChartFormat(cf);
        
        //设置绘图区颜色
        cf = chart.getPlotFormat();
        cf.setPattern((short)1);
        cf.setPatternFG(Color.WHITE.getRGB());
        cf.setLineColor(new Color(255, 255, 255,0).getRGB());
        cf.isLineNone();
        chart.setPlotFormat(cf);
        
        //设置横坐标文字大小
        cf = chart.getAxisFormat(ChartShape.XAxis, 0);
        cf.setFontSizeInPoints(8.5);
        cf.setTextRotation(-90);
        //cf.set
        chart.setAxisFormat(ChartShape.XAxis, 0, cf);

//设置纵坐标文字大小
        cf = chart.getAxisFormat(ChartShape.YAxis, 0);
        cf.setFontSizeInPoints(8.5);
        cf.isLineNone();
        cf.setLineColor(Color.WHITE.getRGB());
        chart.setAxisFormat(ChartShape.YAxis, 0, cf);
        
        //设置y轴最大最小值(系统默认自动生成最大值最小值,非常不好看)
        chart.setAutoMaximumScale(ChartShape.YAxis, 0, false);//如果要自己设置,需要将默认的最大值最小值设置为false
        chart.setAutoMinimumScale(ChartShape.YAxis, 0, false);
        //设置最大值最小值,由于画布本来有外边框,如果将外边框去掉会导致最上面的网格线显示不出来,3.1是为了3这根线能展示,具体根据自己的项目设置
        
        double max = Double.parseDouble(maxData.toString());
        double min = Double.parseDouble(minData.toString());
        if(max == min){
            chart.setScaleValueRange(ChartShape.YAxis,0,min-0.5,max+0.5);
            //设置y轴值间隔(默认根据数据系统自动生成间隔)
            chart.setScaleMajorUnitAuto(ChartShape.YAxis,0,false);//必须将默认的间隔设置设置为false,自己设置间隔
            chart.setScaleMajorUnit(ChartShape.YAxis,0,0.1);//设置间隔
        }else{
            //计算他们的间隔
            double interval = PublicMethod.saveTwoPointDouble((max-min+1)/10+"");
            min = PublicMethod.saveTwoPointDouble(min+"");//最大值
            max = PublicMethod.saveTwoPointDouble(max+"");//最小值,设置值域
            chart.setScaleValueRange(ChartShape.YAxis,0,min-0.5,max+0.5);
            //设置y轴值间隔(默认根据数据系统自动生成间隔)
            chart.setScaleMajorUnitAuto(ChartShape.YAxis,0,false);//必须将默认的间隔设置设置为false,自己设置间隔
            chart.setScaleMajorUnit(ChartShape.YAxis,0,interval);//设置间隔
        }
        chart.setAxisScaleCrosses(ChartShape.YAxis, 0, false, -4);
        
        //设置图标内标线样式
        cf = chart.getSeriesFormat(0);//设置我的线的颜色。样式
        cf.setLineStyle((short)2);//线的样式类型
        cf.setLineWeight(30);
        cf.setLineColor(0x00CCFF);
        cf.setMarkerAuto(false);
        cf.setMarkerStyle((short)0);
        chart.setSeriesFormat(0, cf);

//主格网
        cf = chart.getMajorGridFormat(ChartShape.YAxis, 0);
        cf.setLineStyle((short)1);
        cf.setForeColor((new Color(0,0,0,0)).getRGB());
        cf.setLineColor((new Color(224, 224, 224)).getRGB());
        cf.setLineWeight(1);
        chart.setMajorGridFormat(ChartShape.YAxis, 0, cf);
        
        //图利位置
        chart.setLegendPosition(ChartFormat.LegendPlacementBottom);
        
        //图利样式,解释各条线的名称
        cf = chart.getLegendFormat();
        cf.setFontBold(true);
        cf.setFontSizeInPoints(8);
        cf.setLineColor(Color.WHITE.getRGB());
        chart.setLegendFormat(cf);
    }

最后。还有很多东西,自己还没有接触到,以后接触到,再分享出来,有问题,请多多指教,谢谢浏览。

jxcell开发简单实例相关推荐

  1. VC6下miniblink应用开发简单实例

    VC6下miniblink应用开发简单实例 最近研究浏览器的开发和数据采集,发现miniblink这个东西不错,可以试着在这个空间基础上做很多工作,很有兴趣,初步进行了研究和学习,随时把学习的代码分享 ...

  2. php银联支付接口 demo,php版银联支付接口开发简单实例详解

    这篇文章主要介绍了php版银联支付接口开发的方法,结合实例形式分析了php银联支付接口开发的具体流程与相关操作技巧,需要的朋友可以参考下 支付接口现在有第三方的支付接口也有银行的支付接口.这里就来介绍 ...

  3. ios APP开发简单实例

    这一次的任务是两个人合作设计一个简单的APP,其中设计到了源代码的设计,源代码的实现以及源代码的控制.在设计app前,我们先仔细研究了软件是如何设计与实现的,然后我们决定做个简单的app-提醒小闹钟. ...

  4. ios app开发简单实例--源代码管理的基本操作

    源代码管理的基本操作主要包括代码规范和代码复审. "代码规范"可以分成两个部分. (1)代码风格规范.主要是文字上的规定,看似表面文章,实际上非常重要. (2)代码设计规范.牵涉到 ...

  5. java软件开发 jpanel_java图像界面开发简单实例-JPanel应用 | 学步园

    importjava.awt.Graphics;importjavax.swing.JFrame;importjavax.swing.JPanel;/*** 扩展于JPanel的类,重写paintCo ...

  6. LinuxC/C++编程基础(24) 使用thrift/rpc开发简单实例(续2)

    写在前面:前面两篇文字已经把thrift/rpc的安装以及服务端的编写叙述了,这里再把客户端的编写加上 一.client.cpp文件实现,如下: #include "../gen-cpp/M ...

  7. webservice实例java_Java WebService(实战) 简单实例

    一.准备工作(以下为本实例使用工具) 1.MyEclipse10.7.1 2.JDK 1.6.0_22 二.创建服务端 1.创建[Web Service Project],命名为[TheService ...

  8. Hibernate搭建开发环境+简单实例(二)

    2019独角兽企业重金招聘Python工程师标准>>> Hibernate是非常典型的持久层框架,持久化的思想是非常值得我们学习和研究的.这篇博文,我们主要以实例的形式学习Hiber ...

  9. php阅读器开发,微信小程序阅读器的简单实例开发

    这篇文章主要介绍微信小程序阅读器的简单实例开发的相关资料,需要的朋友可以参考下 今天和朋友聊天说到小程序,然后看在看书,然后我们就弄了个小读书的demo,然后现在分享一下. 一.先来上图: 首先先说下 ...

最新文章

  1. Jmeter脚本 GUI和非GUI启动方式
  2. 用Python分析北上广深租房情况,租房时优先考虑哪些因素?
  3. apache httpd服务器403 forbidden的问题
  4. [导入]日志 20071211(WCF,实验室产品)
  5. Linux命令篇之tree命令和touch命令
  6. asr1009查看接口光衰_python脚本检查H3C交换机光衰
  7. Flink读写Mysql(Java版)
  8. this指向_js中关于this指向的训练题
  9. Google手机移动网站适配(双向注释)
  10. Python对文本文件的简单操作(一)
  11. bjui给出的一个标准应用的首页
  12. android网易云桌面歌词,网易云怎么设置桌面歌词?
  13. 常用软件分类运维或个人收藏软件必备,及文件夹打包下载
  14. IDEA中格式化代码快捷键
  15. 用python写生日快乐说说_生日快乐的说说(精选50句)
  16. 设置背景颜色html,css怎么设置背景颜色?
  17. 19年绝响,张国荣「复活」!AI高清修复《热·情》燃爆2000万观众
  18. Map与JSON之间转换
  19. for循环遍历字符串
  20. 初识MIMO(二):MIMO的信道容量及其仿真

热门文章

  1. 仙人掌之歌——直播业务立项(2)
  2. nomachine NX 远程连接相关问题
  3. 深圳物流 inurl php id=,免费快递在线下单接口对接文档-(PHP)
  4. lnmp全面优化集合nginx+mysql+php
  5. 使用Mozilla Thunderbird 创建ics日历文件
  6. 多线程下载视频,并运用Fmmpeg合成
  7. 泥瓦匠想做一个与众不同的技术匠
  8. Android学习记录
  9. 软件架构模式 mark Richards - 读后总结 3 - 微内核架构
  10. 南京艺术学院计算机考研,南京艺术学院考研难吗?一般要什么水平才可以进入?...