精华内容
下载资源
问答
  • 最牛无价EXCEL教程

    2011-11-03 17:51:26
    Excel中字符替换 在Excel中直接编辑“宏” 在Excel中为导入外部数据 在Excel中行列快速转换 在Excel中运行“宏” 在Excel中添加说明文字 在Excel中数据分列整理 在Excel中数据合并 在Excel中添加常用文件夹 在...
  • 经过查阅无数资料,发现一个比较B的临时解决办法:当出现这个报错信息的时候,先打开一个Excel文档,再在Word里插入想要插入的Excel就不会报错了,亲测,该方法是在百度知道里找到了,真的是高手在民间。...

    Word插入Excel的时候一直报错:用于创建此对象的程序是Excel。 您的计算机尚未安装此程序或此程序无响应。若要编辑此对象,请安装Excel或确保Excel中的任何对话框都已关闭。

    经过查阅无数资料,发现一个比较牛B的临时解决办法:当出现这个报错信息的时候,先打开一个Excel文档,再在Word里插入想要插入的Excel就不会报错了,亲测,该方法是在百度知道里找到了,真的是高手在民间。

     

    以下是百度知道原答案:https://zhidao.baidu.com/question/453528605.html

     

    请高手告诉永久解决办法,谢谢!

    展开全文
  • excel2Pojo(Workbook workbook, Class<T> clazz) throws Exception { if (!(null != workbook && null != clazz)) { return null; } List<...
    public static <T> List<T> excel2Pojo(Workbook workbook, Class<T> clazz) throws Exception {
    		
    		if (!(null != workbook && null != clazz)) {
    			return null;
    		}
    		
    		List<T> poList = null;
    		try {
    			Workbook excel = workbook;
    			Sheet sheet = excel.getSheetAt(0);
    			// 获取到总共有多少行
    			int rowNum = sheet.getLastRowNum();
    			// 获取到标题行
    			Row headRow = sheet.getRow(0);
    			// 获取到标题总共有多少列
    			short cellNum = headRow.getLastCellNum();
    			
    			// 创建集合用来存储实例化的对象
    			poList = new ArrayList<>();
    			// 循环遍历每一行记录
    			for (int i = 1; i <= rowNum; i++) {
    			// 创建实体类
    			T newPojo = clazz.newInstance();
    			// 遍历每一列记录
    			for (int j = 0; j < cellNum; j++) {
    			// 获取到标题文字
    			String headName = headRow.getCell(j).toString();
    			/**
    			 * 遍历要封装类的属性并获取起注解上方 属性命名 查看是否和当前Excel的标题相同
    			 * 	相同则封装
    			 * 	不同则不理
    			 */
    			// 获取所有的字段反射对象
    			Field[] declaredFields = clazz.getDeclaredFields();
    			for (Field field : declaredFields) {
    			 field.setAccessible(true);
    			// 获取到注解类型
    			PropertiesName annotation = field.getAnnotation(PropertiesName.class);
    				if(annotation==null){
    					continue;
    				}
    				// 获取到属性命名
    				String propertiesName = annotation.name();
    				if (headName.equals(propertiesName)) {
    				// Excel标题头和属性相对应
    				Class<? extends Object> type = field.getType();
    				if (type.equals(Integer.class)) {
                      if(sheet.getRow(i).getCell(j)!=null){
                       String string = sheet.getRow(i).getCell(j).toString();
                          int index = string.lastIndexOf(".");
                          string = string.substring(0,index);
                         field.set(newPojo, Integer.valueOf(string));
                         }
    			     } else if (type.equals(String.class)) {
                     if(sheet.getRow(i).getCell(j)!=null)
    				   field.set(newPojo, sheet.getRow(i).getCell(j).toString());
    				 } else if (type.equals(Double.class)) {
                     if(sheet.getRow(i).getCell(j)!=null)
    				 field.set(newPojo, new Double(sheet.getRow(i).getCell(j).toString()));
    				} else if (type.equals(BigDecimal.class)) {
                      if(sheet.getRow(i).getCell(j)!=null)
    			field.set(newPojo, new BigDecimal(sheet.getRow(i).getCell(j).toString()));
    				} else if (type.equals(Date.class)) {
    				SimpleDateFormat sdf = null;
    				String dateStr = sheet.getRow(i).getCell(j).toString();
    				// 验证 是否为:yyyy-MM-dd HH:mm:ss
    				if (dateStr.matches(DateFormatEnum.REGEX_ONE.getValue())) {
    				sdf = new SimpleDateFormat(DateFormatEnum.FORMAT_ONE.getValue());
    				Date date = sdf.parse(dateStr);
    				field.set(newPojo, date);
    				} else if (dateStr.matches(DateFormatEnum.REGEX_TWO.getValue())) {
    				sdf = new SimpleDateFormat(DateFormatEnum.FORMAT_TWO.getValue());
    				Date date = sdf.parse(dateStr);
    				field.set(newPojo, date);
    				}  else if (dateStr.matches(DateFormatEnum.REGEX_THREE.getValue())) {
    				sdf = new SimpleDateFormat(DateFormatEnum.FORMAT_THREE.getValue());
    				Date date = sdf.parse(dateStr);
    				field.set(newPojo, date);
    				}  else if (dateStr.matches(DateFormatEnum.REGEX_FOUR.getValue())) {
    				sdf = new SimpleDateFormat(DateFormatEnum.FORMAT_FOUR.getValue());
    				Date date = sdf.parse(dateStr);
    				field.set(newPojo, date);
    								} 
    							}
    						}
    					}
    				}
    				poList.add(newPojo);
    			}
    		} catch (Exception e) {
    			throw e;
    		}
    		return poList;
    		
    	}
    

    这个workbook类是org.apache.poi.ss.usermodel.Workbook这个包

    另外需要一个注解类

    /**
     * 给Bean属性上加上名称
     * 
     * @author 大漠知秋
     */
    @Target(ElementType.FIELD)
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface PropertiesName {
    
       public String name();
       
    }

    将实体类名都用注解进行关联

    所获取的实体类集合用BeanUtils.copy( . )方法复制到我们正式的实体类中

    再使用批量插入的方法插入到数据库中

     

    展开全文
  • 前段时间,因为客户需要,要做一个导出excel文件功能,并能生成原生的图表的(不是把图片插入到excel文档),找了很多文档看,也看了很多别人的代码,个人也总结了一下,不足之处,请各位大谅解. 需要的jar包如下(直接使用...

    前段时间,因为客户需要,要做一个导出excel文件功能,并能生成原生的图表的(不是把图片插入到excel文档),找了很多文档看,也看了很多别人的代码,个人也总结了一下,不足之处,请各位大牛谅解.

    需要的jar包如下(直接使用maven仓库):

    <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-scratchpad</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>xdocreport</artifactId>
                <version>1.0.6</version>
            </dependency>
            <dependency>
                <groupId> fr.opensagres.xdocreport</groupId>
                <artifactId> org.apache.poi.xwpf.converter.core</artifactId>
                <version> 1.0.6</version>
            </dependency>
            <dependency>
                <groupId>fr.opensagres.xdocreport</groupId>
                <artifactId>org.apache.poi.xwpf.converter.xhtml</artifactId>
                <version>1.0.6</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml-schemas</artifactId>
                <version>3.17</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>ooxml-schemas</artifactId>
                <version>1.3</version>
            </dependency>

    废话不多说,代码如下:

    1. package com.jsfund.crm.common.utils;
    2. import java.io.File;
    3. import java.io.FileOutputStream;
    4. import java.io.IOException;
    5. import java.util.ArrayList;
    6. import java.util.HashMap;
    7. import java.util.List;
    8. import java.util.Map;
    9. import org.apache.poi.ss.usermodel.BorderStyle;
    10. import org.apache.poi.ss.usermodel.CellStyle;
    11. import org.apache.poi.ss.usermodel.Chart;
    12. import org.apache.poi.ss.usermodel.ClientAnchor;
    13. import org.apache.poi.ss.usermodel.Drawing;
    14. import org.apache.poi.ss.usermodel.FillPatternType;
    15. import org.apache.poi.ss.usermodel.HorizontalAlignment;
    16. import org.apache.poi.ss.usermodel.IndexedColors;
    17. import org.apache.poi.ss.util.CellRangeAddress;
    18. import org.apache.poi.xssf.streaming.SXSSFRow;
    19. import org.apache.poi.xssf.streaming.SXSSFSheet;
    20. import org.apache.poi.xssf.streaming.SXSSFWorkbook;
    21. import org.apache.poi.xssf.usermodel.XSSFChart;
    22. import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaChart;
    23. import org.openxmlformats.schemas.drawingml.x2006.chart.CTAreaSer;
    24. import org.openxmlformats.schemas.drawingml.x2006.chart.CTAxDataSource;
    25. import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarChart;
    26. import org.openxmlformats.schemas.drawingml.x2006.chart.CTBarSer;
    27. import org.openxmlformats.schemas.drawingml.x2006.chart.CTBoolean;
    28. import org.openxmlformats.schemas.drawingml.x2006.chart.CTCatAx;
    29. import org.openxmlformats.schemas.drawingml.x2006.chart.CTChart;
    30. import org.openxmlformats.schemas.drawingml.x2006.chart.CTDLbls;
    31. import org.openxmlformats.schemas.drawingml.x2006.chart.CTLegend;
    32. import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineChart;
    33. import org.openxmlformats.schemas.drawingml.x2006.chart.CTLineSer;
    34. import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarker;
    35. import org.openxmlformats.schemas.drawingml.x2006.chart.CTMarkerStyle;
    36. import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumDataSource;
    37. import org.openxmlformats.schemas.drawingml.x2006.chart.CTNumRef;
    38. import org.openxmlformats.schemas.drawingml.x2006.chart.CTPie3DChart;
    39. import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieChart;
    40. import org.openxmlformats.schemas.drawingml.x2006.chart.CTPieSer;
    41. import org.openxmlformats.schemas.drawingml.x2006.chart.CTPlotArea;
    42. import org.openxmlformats.schemas.drawingml.x2006.chart.CTScaling;
    43. import org.openxmlformats.schemas.drawingml.x2006.chart.CTSerTx;
    44. import org.openxmlformats.schemas.drawingml.x2006.chart.CTStrRef;
    45. import org.openxmlformats.schemas.drawingml.x2006.chart.CTValAx;
    46. import org.openxmlformats.schemas.drawingml.x2006.chart.STAxPos;
    47. import org.openxmlformats.schemas.drawingml.x2006.chart.STBarDir;
    48. import org.openxmlformats.schemas.drawingml.x2006.chart.STBarGrouping;
    49. import org.openxmlformats.schemas.drawingml.x2006.chart.STBarGrouping.Enum;
    50. import org.openxmlformats.schemas.drawingml.x2006.chart.STDispBlanksAs;
    51. import org.openxmlformats.schemas.drawingml.x2006.chart.STGrouping;
    52. import org.openxmlformats.schemas.drawingml.x2006.chart.STLegendPos;
    53. import org.openxmlformats.schemas.drawingml.x2006.chart.STMarkerStyle;
    54. import org.openxmlformats.schemas.drawingml.x2006.chart.STOrientation;
    55. import org.openxmlformats.schemas.drawingml.x2006.chart.STTickLblPos;
    56. /**
    57.  * java利用poi生成excel图表
    58.  *
    59.  * @author chen
    60.  *
    61.  */
    62. public class ExcelChartUtil1 {
    63.     private static SXSSFWorkbook wb = new SXSSFWorkbook();
    64.     private SXSSFSheet sheet = null;
    65.     public static void main(String[] args) {
    66.         // 字段名
    67.         List<String> fldNameArr = new ArrayList<String>();
    68.         // 标题
    69.         List<String> titleArr = new ArrayList<String>();
    70.         // 模拟数据
    71.         List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
    72.         Map<String, Object> dataMap1 = new HashMap<String, Object>();
    73.         dataMap1.put("value1", "股票");
    74.         dataMap1.put("value2", Math.floor(Math.random() * 100) + "");
    75.         dataMap1.put("value3", Math.floor(Math.random() * 100) + "");
    76.         dataMap1.put("value4", Math.floor(Math.random() * 100) + "");
    77.         Map<String, Object> dataMap2 = new HashMap<String, Object>();
    78.         dataMap2.put("value1", "货币型基金");
    79.         dataMap2.put("value2", Math.floor(Math.random() * 100) + "");
    80.         dataMap2.put("value3", Math.floor(Math.random() * 100) + "");
    81.         dataMap2.put("value4", Math.floor(Math.random() * 100) + "");
    82.         Map<String, Object> dataMap3 = new HashMap<String, Object>();
    83.         dataMap3.put("value1", "可转债");
    84.         dataMap3.put("value2", Math.floor(Math.random() * 100) + "");
    85.         dataMap3.put("value3", Math.floor(Math.random() * 100) + "");
    86.         dataMap3.put("value4", Math.floor(Math.random() * 100) + "");
    87.         Map<String, Object> dataMap4 = new HashMap<String, Object>();
    88.         dataMap4.put("value1", "买入返售");
    89.         dataMap4.put("value2", Math.floor(Math.random() * 100) + "");
    90.         dataMap4.put("value3", Math.floor(Math.random() * 100) + "");
    91.         dataMap4.put("value4", Math.floor(Math.random() * 100) + "");
    92.         Map<String, Object> dataMap5 = new HashMap<String, Object>();
    93.         dataMap5.put("value1", "通知存款");
    94.         dataMap5.put("value2", Math.floor(Math.random() * 100) + "");
    95.         dataMap5.put("value3", Math.floor(Math.random() * 100) + "");
    96.         dataMap5.put("value4", Math.floor(Math.random() * 100) + "");
    97.         Map<String, Object> dataMap6 = new HashMap<String, Object>();
    98.         dataMap6.put("value1", "当月累计");
    99.         dataMap6.put("value2", Math.floor(Math.random() * 100) + "");
    100.         dataMap6.put("value3", Math.floor(Math.random() * 100) + "");
    101.         dataMap6.put("value4", Math.floor(Math.random() * 100) + "");
    102.         fldNameArr.add("value1");
    103.         fldNameArr.add("value2");
    104.         fldNameArr.add("value3");
    105.         fldNameArr.add("value4");
    106.         titleArr.add("类型");
    107.         titleArr.add("买入");
    108.         titleArr.add("卖出");
    109.         titleArr.add("分红");
    110.         dataList.add(dataMap1);
    111.         dataList.add(dataMap2);
    112.         dataList.add(dataMap3);
    113.         dataList.add(dataMap4);
    114.         dataList.add(dataMap5);
    115.         dataList.add(dataMap6);
    116.         ExcelChartUtil1 ecu = new ExcelChartUtil1();
    117.         try {
    118.             // 创建柱状图
    119.             ecu.createBarChart(titleArr, fldNameArr, dataList);
    120.             // 创建饼状图
    121.             ecu.createPieChart(titleArr, fldNameArr, dataList);
    122.             // 创建折线图
    123.             ecu.createTimeXYChar(titleArr, fldNameArr, dataList);
    124.             // 创建面积图
    125.             ecu.createAreaChart(titleArr, fldNameArr, dataList);
    126.             //导出到文件
    127.             FileOutputStream out = new FileOutputStream(new File("E:/jcdemo/" + System.currentTimeMillis() + ".xls"));
    128.             wb.write(out);
    129.             out.close();
    130.         } catch (IOException e) {
    131.             e.printStackTrace();
    132.         }
    133.     }
    134.     /**
    135.      * 创建柱状图(堆积图,多组)
    136.      *
    137.      * @throws IOException
    138.      */
    139.     public void createBarChart(List<String> titleArr, List<String> fldNameArr, List<Map<String, Object>> dataList) {
    140.         // 创建一个sheet页
    141.         sheet = wb.createSheet("sheet0");
    142.         // drawSheet0Table(sheet,titleArr,fldNameArr,dataList);
    143.         // 堆积=STBarGrouping.STACKED 多组=STBarGrouping.CLUSTERED
    144.         boolean result = drawSheet0Map(sheet, STBarGrouping.CLUSTERED, fldNameArr, dataList, titleArr);
    145.         System.out.println("生成柱状图(堆积or多组)-->" + result);
    146.     }
    147.     /**
    148.      * 生成柱状图
    149.      *
    150.      * @param sheet
    151.      *            页签
    152.      * @param group
    153.      *            柱状图类型(堆积,多组)
    154.      * @param fldNameArr
    155.      *            坐标名称
    156.      * @param dataList
    157.      *            统计数据
    158.      * @return
    159.      */
    160.     private boolean drawSheet0Map(SXSSFSheet sheet, Enum group, List<String> fldNameArr,
    161.             List<Map<String, Object>> dataList, List<String> titleArr) {
    162.         boolean result = false;
    163.         // 获取sheet名称
    164.         String sheetName = sheet.getSheetName();
    165.         result = drawSheet0Table(sheet, titleArr, fldNameArr, dataList);
    166.         // 创建一个画布
    167.         Drawing<?> drawing = sheet.createDrawingPatriarch();
    168.         // 画一个图区域
    169.         // 前四个默认0,从第8行到第25行,从第0列到第6列的区域
    170.         ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 8, 6, 25);
    171.         // 创建一个chart对象
    172.         Chart chart = drawing.createChart(anchor);
    173.         CTChart ctChart = ((XSSFChart) chart).getCTChart();
    174.         CTPlotArea ctPlotArea = ctChart.getPlotArea();
    175.         // 创建柱状图模型
    176.         CTBarChart ctBarChart = ctPlotArea.addNewBarChart();
    177.         CTBoolean ctBoolean = ctBarChart.addNewVaryColors();
    178.         ctBarChart.getVaryColors().setVal(true);
    179.         // 设置图类型
    180.         ctBarChart.addNewGrouping().setVal(group);
    181.         ctBoolean.setVal(true);
    182.         ctBarChart.addNewBarDir().setVal(STBarDir.COL);
    183.         // 是否添加左侧坐标轴
    184.         ctChart.addNewDispBlanksAs().setVal(STDispBlanksAs.ZERO);
    185.         ctChart.addNewShowDLblsOverMax().setVal(true);
    186.         // 设置这两个参数是为了在STACKED模式下生成堆积模式;(standard)标准模式时需要将这两行去掉
    187.         if ("stacked".equals(group.toString()) || "percentStacked".equals(group.toString())) {
    188.             ctBarChart.addNewGapWidth().setVal(150);
    189.             ctBarChart.addNewOverlap().setVal((byte) 100);
    190.         }
    191.         // 创建序列,并且设置选中区域
    192.         for (int i = 0; i < fldNameArr.size() - 1; i++) {
    193.             CTBarSer ctBarSer = ctBarChart.addNewSer();
    194.             CTSerTx ctSerTx = ctBarSer.addNewTx();
    195.             // 图例区
    196.             CTStrRef ctStrRef = ctSerTx.addNewStrRef();
    197.             // 选定区域第0行,第1,2,3列标题作为图例 //1 2 3
    198.             String legendDataRange = new CellRangeAddress(0, 0, i + 1, i + 1).formatAsString(sheetName, true);
    199.             ctStrRef.setF(legendDataRange);
    200.             ctBarSer.addNewIdx().setVal(i);
    201.             // 横坐标区
    202.             CTAxDataSource cttAxDataSource = ctBarSer.addNewCat();
    203.             ctStrRef = cttAxDataSource.addNewStrRef();
    204.             // 选第0列,第1-6行作为横坐标区域
    205.             String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0).formatAsString(sheetName, true);
    206.             ctStrRef.setF(axisDataRange);
    207.             // 数据区域
    208.             CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();
    209.             CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
    210.             // 选第1-6行,第1-3列作为数据区域 //1 2 3
    211.             String numDataRange = new CellRangeAddress(1, dataList.size(), i + 1, i + 1).formatAsString(sheetName,
    212.                     true);
    213.             System.out.println(numDataRange);
    214.             ctNumRef.setF(numDataRange);
    215.             // 添加柱状边框线
    216.             ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] { 0, 0, 0 });
    217.             // 设置负轴颜色不是白色
    218.             ctBarSer.addNewInvertIfNegative().setVal(false);
    219.             // 设置标签格式
    220.             ctBoolean.setVal(false);
    221.             CTDLbls newDLbls = ctBarSer.addNewDLbls();
    222.             newDLbls.setShowLegendKey(ctBoolean);
    223.             ctBoolean.setVal(true);
    224.             newDLbls.setShowVal(ctBoolean);
    225.             ctBoolean.setVal(false);
    226.             newDLbls.setShowCatName(ctBoolean);
    227.             newDLbls.setShowSerName(ctBoolean);
    228.             newDLbls.setShowPercent(ctBoolean);
    229.             newDLbls.setShowBubbleSize(ctBoolean);
    230.             newDLbls.setShowLeaderLines(ctBoolean);
    231.         }
    232.         // 告诉BarChart它有坐标轴,并给它们id
    233.         ctBarChart.addNewAxId().setVal(123456);
    234.         ctBarChart.addNewAxId().setVal(123457);
    235.         // 横坐标
    236.         CTCatAx ctCatAx = ctPlotArea.addNewCatAx();
    237.         ctCatAx.addNewAxId().setVal(123456); // id of the cat axis
    238.         CTScaling ctScaling = ctCatAx.addNewScaling();
    239.         ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    240.         ctCatAx.addNewAxPos().setVal(STAxPos.B);
    241.         ctCatAx.addNewCrossAx().setVal(123457); // id of the val axis
    242.         ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    243.         // 纵坐标
    244.         CTValAx ctValAx = ctPlotArea.addNewValAx();
    245.         ctValAx.addNewAxId().setVal(123457); // id of the val axis
    246.         ctScaling = ctValAx.addNewScaling();
    247.         ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    248.         // 设置位置
    249.         ctValAx.addNewAxPos().setVal(STAxPos.L);
    250.         ctValAx.addNewCrossAx().setVal(123456); // id of the cat axis
    251.         ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    252.         // 是否删除主左边轴
    253.         ctValAx.addNewDelete().setVal(false);
    254.         // 是否删除横坐标
    255.         ctCatAx.addNewDelete().setVal(false);
    256.         // legend图注
    257.         // if(true){
    258.         CTLegend ctLegend = ctChart.addNewLegend();
    259.         ctLegend.addNewLegendPos().setVal(STLegendPos.B);
    260.         ctLegend.addNewOverlay().setVal(false);
    261.         // }
    262.         return result;
    263.     }
    264.     /**
    265.      * 创建横向柱状图
    266.      *
    267.      * @throws IOException
    268.      */
    269.     public void createAreaChart(List<String> titleArr, List<String> fldNameArr,
    270.             List<Map<String, Object>> dataList) {
    271.         // 创建一个sheet页
    272.         sheet = wb.createSheet("sheet1");
    273.         boolean result = drawSheet1Map(sheet, "is3D", fldNameArr, dataList, titleArr);
    274.         System.out.println("生成面积图-->" + result);
    275.     }
    276.     /**
    277.      * 生成面积图
    278.      * @param sheet
    279.      * @param type
    280.      * @param fldNameArr
    281.      * @param dataList
    282.      * @param titleArr
    283.      * @return
    284.      */
    285.     private boolean drawSheet1Map(SXSSFSheet sheet, String type, List<String> fldNameArr,
    286.             List<Map<String, Object>> dataList, List<String> titleArr) {
    287.         boolean result = false;
    288.         // 获取sheet名称
    289.         String sheetName = sheet.getSheetName();
    290.         result = drawSheet0Table(sheet, titleArr, fldNameArr, dataList);
    291.         // 创建一个画布
    292.         Drawing<?> drawing = sheet.createDrawingPatriarch();
    293.         // 画一个图区域
    294.         // 前四个默认0,从第8行到第25行,从第0列到第6列的区域
    295.         ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 8, 6, 25);
    296.         // 创建一个chart对象
    297.         Chart chart = drawing.createChart(anchor);
    298.         CTChart ctChart = ((XSSFChart) chart).getCTChart();
    299.         CTPlotArea ctPlotArea = ctChart.getPlotArea();
    300.         CTAreaChart ctAreaChart = ctPlotArea.addNewAreaChart();
    301.         CTBoolean ctBoolean = ctAreaChart.addNewVaryColors();
    302.         ctAreaChart.addNewGrouping().setVal(STGrouping.STANDARD);
    303.         // 创建序列,并且设置选中区域
    304.         for (int i = 2; i < fldNameArr.size() - 1; i++) {
    305.             CTAreaSer ctAreaSer = ctAreaChart.addNewSer();
    306.             CTSerTx ctSerTx = ctAreaSer.addNewTx();
    307.             // 图例区
    308.             CTStrRef ctStrRef = ctSerTx.addNewStrRef();
    309.             // 选定区域第0行,第1,2,3列标题作为图例 //1 2 3
    310.             String legendDataRange = new CellRangeAddress(0, 0, i + 1, i + 1).formatAsString(sheetName, true);
    311.             ctStrRef.setF(legendDataRange);
    312.             ctAreaSer.addNewIdx().setVal(i);
    313.             // 横坐标区
    314.             CTAxDataSource cttAxDataSource = ctAreaSer.addNewCat();
    315.             ctStrRef = cttAxDataSource.addNewStrRef();
    316.             // 选第0列,第1-6行作为横坐标区域
    317.             String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0).formatAsString(sheetName, true);
    318.             ctStrRef.setF(axisDataRange);
    319.             // 数据区域
    320.             CTNumDataSource ctNumDataSource = ctAreaSer.addNewVal();
    321.             CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
    322.             // 选第1-6行,第1-3列作为数据区域 //1 2 3
    323.             String numDataRange = new CellRangeAddress(1, dataList.size(), i + 1, i + 1).formatAsString(sheetName,
    324.                     true);
    325.             System.out.println(numDataRange);
    326.             ctNumRef.setF(numDataRange);
    327.             // 设置标签格式
    328.             ctBoolean.setVal(false);
    329.             CTDLbls newDLbls = ctAreaSer.addNewDLbls();
    330.             newDLbls.setShowLegendKey(ctBoolean);
    331.             ctBoolean.setVal(true);
    332.             newDLbls.setShowVal(ctBoolean);
    333.             ctBoolean.setVal(false);
    334.             newDLbls.setShowCatName(ctBoolean);
    335.             newDLbls.setShowSerName(ctBoolean);
    336.             newDLbls.setShowPercent(ctBoolean);
    337.             newDLbls.setShowBubbleSize(ctBoolean);
    338.             newDLbls.setShowLeaderLines(ctBoolean);
    339.             /*
    340.              * //是否是平滑曲线 CTBoolean addNewSmooth = ctAreaSer.addNewSmooth();
    341.              * addNewSmooth.setVal(false); //是否是堆积曲线 CTMarker addNewMarker =
    342.              * ctAreaSer.addNewMarker(); CTMarkerStyle addNewSymbol =
    343.              * addNewMarker.addNewSymbol();
    344.              * addNewSymbol.setVal(STMarkerStyle.NONE);
    345.              */
    346.         }
    347.         // telling the BarChart that it has axes and giving them Ids
    348.         ctAreaChart.addNewAxId().setVal(123456);
    349.         ctAreaChart.addNewAxId().setVal(123457);
    350.         // cat axis
    351.         CTCatAx ctCatAx = ctPlotArea.addNewCatAx();
    352.         ctCatAx.addNewAxId().setVal(123456); // id of the cat axis
    353.         CTScaling ctScaling = ctCatAx.addNewScaling();
    354.         ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    355.         ctCatAx.addNewAxPos().setVal(STAxPos.B);
    356.         ctCatAx.addNewCrossAx().setVal(123457); // id of the val axis
    357.         ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    358.         // val axis
    359.         CTValAx ctValAx = ctPlotArea.addNewValAx();
    360.         ctValAx.addNewAxId().setVal(123457); // id of the val axis
    361.         ctScaling = ctValAx.addNewScaling();
    362.         ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    363.         ctValAx.addNewAxPos().setVal(STAxPos.L);
    364.         ctValAx.addNewCrossAx().setVal(123456); // id of the cat axis
    365.         ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    366.         // 是否删除主左边轴
    367.         ctValAx.addNewDelete().setVal(false);
    368.         // 是否删除横坐标
    369.         ctCatAx.addNewDelete().setVal(false);
    370.         // legend图注
    371.         CTLegend ctLegend = ctChart.addNewLegend();
    372.         ctLegend.addNewLegendPos().setVal(STLegendPos.B);
    373.         ctLegend.addNewOverlay().setVal(false);
    374.         return result;
    375.     }
    376.     /**
    377.      * 创建饼状图
    378.      *
    379.      * @throws IOException
    380.      */
    381.     public void createPieChart(List<String> titleArr, List<String> fldNameArr, List<Map<String, Object>> dataList) {
    382.         // 创建一个sheet页
    383.         sheet = wb.createSheet("sheet2");
    384.         boolean result = drawSheet2Map(sheet, "is3D", fldNameArr, dataList, titleArr);
    385.         System.out.println("生成饼状图(普通or3D)-->" + result);
    386.     }
    387.     /**
    388.      * 创建饼状图
    389.      *
    390.      * @param sheet
    391.      *            页签
    392.      * @param type
    393.      *            图类型(3D或者普通)
    394.      * @param fldNameArr
    395.      *            (类标题)
    396.      * @param dataList
    397.      *            (填充数据)
    398.      * @param titleArr
    399.      *            (标题)
    400.      * @return
    401.      */
    402.     private boolean drawSheet2Map(SXSSFSheet sheet, String type, List<String> fldNameArr,
    403.             List<Map<String, Object>> dataList, List<String> titleArr) {
    404.         boolean result = false;
    405.         // 获取sheet名称
    406.         String sheetName = sheet.getSheetName();
    407.         result = drawSheet0Table(sheet, titleArr, fldNameArr, dataList);
    408.         // 创建一个画布
    409.         Drawing<?> drawing = sheet.createDrawingPatriarch();
    410.         // 画一个图区域
    411.         // 前四个默认0,从第8行到第25行,从第0列到第6列的区域
    412.         ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 8, 6, 25);
    413.         // 创建一个chart对象
    414.         Chart chart = drawing.createChart(anchor);
    415.         CTChart ctChart = ((XSSFChart) chart).getCTChart();
    416.         CTPlotArea ctPlotArea = ctChart.getPlotArea();
    417.         CTBoolean ctBoolean = null;
    418.         CTPie3DChart ctPie3DChart = null;
    419.         CTPieChart ctPieChart = null;
    420.         // 创建饼状图模型
    421.         if (type.equals("is3D")) {
    422.             ctPie3DChart = ctPlotArea.addNewPie3DChart();
    423.             ctBoolean = ctPie3DChart.addNewVaryColors();
    424.         } else {
    425.             ctPieChart = ctPlotArea.addNewPieChart();
    426.             ctBoolean = ctPieChart.addNewVaryColors();
    427.         }
    428.         // 创建序列,并且设置选中区域
    429.         for (int i = 0; i < fldNameArr.size() - 1; i++) {
    430.             CTPieSer ctPieSer = null;
    431.             if (type.equals("is3D")) {
    432.                 ctPieSer = ctPie3DChart.addNewSer();
    433.             } else {
    434.                 ctPieSer = ctPieChart.addNewSer();
    435.             }
    436.             CTSerTx ctSerTx = ctPieSer.addNewTx();
    437.             // 图例区
    438.             CTStrRef ctStrRef = ctSerTx.addNewStrRef();
    439.             // 选定区域第0行,第1,2,3列标题作为图例 //1 2 3
    440.             String legendDataRange = new CellRangeAddress(0, 0, i + 1, i + 1).formatAsString(sheetName, true);
    441.             ctStrRef.setF(legendDataRange);
    442.             ctPieSer.addNewIdx().setVal(i);
    443.             // 横坐标区
    444.             CTAxDataSource cttAxDataSource = ctPieSer.addNewCat();
    445.             ctStrRef = cttAxDataSource.addNewStrRef();
    446.             // 选第0列,第1-6行作为横坐标区域
    447.             String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0).formatAsString(sheetName, true);
    448.             ctStrRef.setF(axisDataRange);
    449.             // 数据区域
    450.             CTNumDataSource ctNumDataSource = ctPieSer.addNewVal();
    451.             CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
    452.             // 选第1-6行,第1-3列作为数据区域 //1 2 3
    453.             String numDataRange = new CellRangeAddress(1, dataList.size(), i + 1, i + 1).formatAsString(sheetName,
    454.                     true);
    455.             System.out.println(numDataRange);
    456.             ctNumRef.setF(numDataRange);
    457.             // 显示边框线
    458.             ctPieSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] { 0, 0, 0 });
    459.             // 设置标签格式
    460.             ctBoolean.setVal(true);
    461.         }
    462.         // legend图注
    463.         CTLegend ctLegend = ctChart.addNewLegend();
    464.         ctLegend.addNewLegendPos().setVal(STLegendPos.B);
    465.         ctLegend.addNewOverlay().setVal(true);
    466.         return result;
    467.     }
    468.     /**
    469.      * 创建折线图
    470.      *
    471.      * @throws IOException
    472.      */
    473.     public void createTimeXYChar(List<String> titleArr, List<String> fldNameArr, List<Map<String, Object>> dataList) {
    474.         // 创建一个sheet页
    475.         sheet = wb.createSheet("sheet3");
    476.         // 第二个参数折线图类型:line=普通折线图,line-bar=折线+柱状图
    477.         boolean result = drawSheet3Map(sheet, "line", fldNameArr, dataList, titleArr);
    478.         System.out.println("生成折线图(折线图or折线图-柱状图)-->" + result);
    479.     }
    480.     /**
    481.      * 生成折线图
    482.      *
    483.      * @param sheet
    484.      *            页签
    485.      * @param type
    486.      *            类型
    487.      * @param fldNameArr
    488.      *            X轴标题
    489.      * @param dataList
    490.      *            填充数据
    491.      * @param titleArr
    492.      *            图例标题
    493.      * @return
    494.      */
    495.     private boolean drawSheet3Map(SXSSFSheet sheet, String type, List<String> fldNameArr,
    496.             List<Map<String, Object>> dataList, List<String> titleArr) {
    497.         boolean result = false;
    498.         // 获取sheet名称
    499.         String sheetName = sheet.getSheetName();
    500.         result = drawSheet0Table(sheet, titleArr, fldNameArr, dataList);
    501.         // 创建一个画布
    502.         Drawing<?> drawing = sheet.createDrawingPatriarch();
    503.         // 画一个图区域
    504.         // 前四个默认0,从第8行到第25行,从第0列到第6列的区域
    505.         ClientAnchor anchor = drawing.createAnchor(0, 0, 0, 0, 0, 8, 6, 25);
    506.         // 创建一个chart对象
    507.         Chart chart = drawing.createChart(anchor);
    508.         CTChart ctChart = ((XSSFChart) chart).getCTChart();
    509.         CTPlotArea ctPlotArea = ctChart.getPlotArea();
    510.         if (type.equals("line-bar")) {
    511.             CTBarChart ctBarChart = ctPlotArea.addNewBarChart();
    512.             CTBoolean ctBoolean = ctBarChart.addNewVaryColors();
    513.             ctBarChart.getVaryColors().setVal(true);
    514.             // 设置类型
    515.             ctBarChart.addNewGrouping().setVal(STBarGrouping.CLUSTERED);
    516.             ctBoolean.setVal(true);
    517.             ctBarChart.addNewBarDir().setVal(STBarDir.COL);
    518.             // 是否添加左侧坐标轴
    519.             ctChart.addNewDispBlanksAs().setVal(STDispBlanksAs.ZERO);
    520.             ctChart.addNewShowDLblsOverMax().setVal(true);
    521.             // 创建序列,并且设置选中区域
    522.             for (int i = 0; i < fldNameArr.size() - 1; i++) {
    523.                 CTBarSer ctBarSer = ctBarChart.addNewSer();
    524.                 CTSerTx ctSerTx = ctBarSer.addNewTx();
    525.                 // 图例区
    526.                 CTStrRef ctStrRef = ctSerTx.addNewStrRef();
    527.                 // 选定区域第0行,第1,2,3列标题作为图例 //1 2 3
    528.                 String legendDataRange = new CellRangeAddress(0, 0, i + 1, i + 1).formatAsString(sheetName, true);
    529.                 ctStrRef.setF(legendDataRange);
    530.                 ctBarSer.addNewIdx().setVal(i);
    531.                 // 横坐标区
    532.                 CTAxDataSource cttAxDataSource = ctBarSer.addNewCat();
    533.                 ctStrRef = cttAxDataSource.addNewStrRef();
    534.                 // 选第0列,第1-6行作为横坐标区域
    535.                 String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0).formatAsString(sheetName, true);
    536.                 ctStrRef.setF(axisDataRange);
    537.                 // 数据区域
    538.                 CTNumDataSource ctNumDataSource = ctBarSer.addNewVal();
    539.                 CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
    540.                 // 选第1-6行,第1-3列作为数据区域 //1 2 3
    541.                 String numDataRange = new CellRangeAddress(1, dataList.size(), i + 1, i + 1).formatAsString(sheetName,
    542.                         true);
    543.                 System.out.println(numDataRange);
    544.                 ctNumRef.setF(numDataRange);
    545.                 ctBarSer.addNewSpPr().addNewLn().addNewSolidFill().addNewSrgbClr().setVal(new byte[] { 0, 0, 0 });
    546.                 // 设置负轴颜色不是白色
    547.                 ctBarSer.addNewInvertIfNegative().setVal(false);
    548.                 // 设置标签格式
    549.                 ctBoolean.setVal(false);
    550.                 CTDLbls newDLbls = ctBarSer.addNewDLbls();
    551.                 newDLbls.setShowLegendKey(ctBoolean);
    552.                 ctBoolean.setVal(true);
    553.                 newDLbls.setShowVal(ctBoolean);
    554.                 ctBoolean.setVal(false);
    555.                 newDLbls.setShowCatName(ctBoolean);
    556.                 newDLbls.setShowSerName(ctBoolean);
    557.                 newDLbls.setShowPercent(ctBoolean);
    558.                 newDLbls.setShowBubbleSize(ctBoolean);
    559.                 newDLbls.setShowLeaderLines(ctBoolean);
    560.             }
    561.             // telling the BarChart that it has axes and giving them Ids
    562.             ctBarChart.addNewAxId().setVal(123456);
    563.             ctBarChart.addNewAxId().setVal(123457);
    564.             // cat axis
    565.             CTCatAx ctCatAx = ctPlotArea.addNewCatAx();
    566.             ctCatAx.addNewAxId().setVal(123456); // id of the cat axis
    567.             CTScaling ctScaling = ctCatAx.addNewScaling();
    568.             ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    569.             ctCatAx.addNewAxPos().setVal(STAxPos.B);
    570.             ctCatAx.addNewCrossAx().setVal(123457); // id of the val axis
    571.             ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    572.             // val axis
    573.             CTValAx ctValAx = ctPlotArea.addNewValAx();
    574.             ctValAx.addNewAxId().setVal(123457); // id of the val axis
    575.             ctScaling = ctValAx.addNewScaling();
    576.             ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    577.             ctValAx.addNewAxPos().setVal(STAxPos.L);
    578.             ctValAx.addNewCrossAx().setVal(123456); // id of the cat axis
    579.             ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    580.         }
    581.         // 折线图
    582.         CTLineChart ctLineChart = ctPlotArea.addNewLineChart();
    583.         CTBoolean ctBoolean = ctLineChart.addNewVaryColors();
    584.         ctLineChart.addNewGrouping().setVal(STGrouping.STANDARD);
    585.         // 创建序列,并且设置选中区域
    586.         for (int i = 0; i < fldNameArr.size() - 1; i++) {
    587.             CTLineSer ctLineSer = ctLineChart.addNewSer();
    588.             CTSerTx ctSerTx = ctLineSer.addNewTx();
    589.             // 图例区
    590.             CTStrRef ctStrRef = ctSerTx.addNewStrRef();
    591.             // 选定区域第0行,第1,2,3列标题作为图例 //1 2 3
    592.             String legendDataRange = new CellRangeAddress(0, 0, i + 1, i + 1).formatAsString(sheetName, true);
    593.             ctStrRef.setF(legendDataRange);
    594.             ctLineSer.addNewIdx().setVal(i);
    595.             // 横坐标区
    596.             CTAxDataSource cttAxDataSource = ctLineSer.addNewCat();
    597.             ctStrRef = cttAxDataSource.addNewStrRef();
    598.             // 选第0列,第1-6行作为横坐标区域
    599.             String axisDataRange = new CellRangeAddress(1, dataList.size(), 0, 0).formatAsString(sheetName, true);
    600.             ctStrRef.setF(axisDataRange);
    601.             // 数据区域
    602.             CTNumDataSource ctNumDataSource = ctLineSer.addNewVal();
    603.             CTNumRef ctNumRef = ctNumDataSource.addNewNumRef();
    604.             // 选第1-6行,第1-3列作为数据区域 //1 2 3
    605.             String numDataRange = new CellRangeAddress(1, dataList.size(), i + 1, i + 1).formatAsString(sheetName,
    606.                     true);
    607.             System.out.println(numDataRange);
    608.             ctNumRef.setF(numDataRange);
    609.             // 设置标签格式
    610.             ctBoolean.setVal(false);
    611.             CTDLbls newDLbls = ctLineSer.addNewDLbls();
    612.             newDLbls.setShowLegendKey(ctBoolean);
    613.             ctBoolean.setVal(true);
    614.             newDLbls.setShowVal(ctBoolean);
    615.             ctBoolean.setVal(false);
    616.             newDLbls.setShowCatName(ctBoolean);
    617.             newDLbls.setShowSerName(ctBoolean);
    618.             newDLbls.setShowPercent(ctBoolean);
    619.             newDLbls.setShowBubbleSize(ctBoolean);
    620.             newDLbls.setShowLeaderLines(ctBoolean);
    621.             // 是否是平滑曲线
    622.             CTBoolean addNewSmooth = ctLineSer.addNewSmooth();
    623.             addNewSmooth.setVal(false);
    624.             // 是否是堆积曲线
    625.             CTMarker addNewMarker = ctLineSer.addNewMarker();
    626.             CTMarkerStyle addNewSymbol = addNewMarker.addNewSymbol();
    627.             addNewSymbol.setVal(STMarkerStyle.NONE);
    628.         }
    629.         // telling the BarChart that it has axes and giving them Ids
    630.         ctLineChart.addNewAxId().setVal(123456);
    631.         ctLineChart.addNewAxId().setVal(123457);
    632.         // cat axis
    633.         CTCatAx ctCatAx = ctPlotArea.addNewCatAx();
    634.         ctCatAx.addNewAxId().setVal(123456); // id of the cat axis
    635.         CTScaling ctScaling = ctCatAx.addNewScaling();
    636.         ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    637.         ctCatAx.addNewAxPos().setVal(STAxPos.B);
    638.         ctCatAx.addNewCrossAx().setVal(123457); // id of the val axis
    639.         ctCatAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    640.         // val axis
    641.         CTValAx ctValAx = ctPlotArea.addNewValAx();
    642.         ctValAx.addNewAxId().setVal(123457); // id of the val axis
    643.         ctScaling = ctValAx.addNewScaling();
    644.         ctScaling.addNewOrientation().setVal(STOrientation.MIN_MAX);
    645.         ctValAx.addNewAxPos().setVal(STAxPos.L);
    646.         ctValAx.addNewCrossAx().setVal(123456); // id of the cat axis
    647.         ctValAx.addNewTickLblPos().setVal(STTickLblPos.NEXT_TO);
    648.         // 是否删除主左边轴
    649.         ctValAx.addNewDelete().setVal(false);
    650.         // 是否删除横坐标
    651.         if (type.equals("line-bar")) {
    652.             ctCatAx.addNewDelete().setVal(true);
    653.         }
    654.         CTLegend ctLegend = ctChart.addNewLegend();
    655.         ctLegend.addNewLegendPos().setVal(STLegendPos.B);
    656.         ctLegend.addNewOverlay().setVal(false);
    657.         return result;
    658.     }
    659.     /**
    660.      * 生成数据表
    661.      *
    662.      * @param sheet
    663.      *            sheet页对象
    664.      * @param titleArr
    665.      *            表头字段
    666.      * @param fldNameArr
    667.      *            左边标题字段
    668.      * @param dataList
    669.      *            数据
    670.      * @return 是否生成成功
    671.      */
    672.     private boolean drawSheet0Table(SXSSFSheet sheet, List<String> titleArr, List<String> fldNameArr,
    673.             List<Map<String, Object>> dataList) {
    674.         // 测试时返回值
    675.         boolean result = true;
    676.         // 初始化表格样式
    677.         List<CellStyle> styleList = tableStyle();
    678.         // 根据数据创建excel第一行标题行
    679.         SXSSFRow row0 = sheet.createRow(0);
    680.         for (int i = 0; i < titleArr.size(); i++) {
    681.             // 设置标题
    682.             row0.createCell(i).setCellValue(titleArr.get(i));
    683.             // 设置标题行样式
    684.             row0.getCell(i).setCellStyle(styleList.get(0));
    685.         }
    686.         // 填充数据
    687.         for (int i = 0; i < dataList.size(); i++) {
    688.             // 获取每一项的数据
    689.             Map<String, Object> data = dataList.get(i);
    690.             // 设置每一行的字段标题和数据
    691.             SXSSFRow rowi = sheet.createRow(i + 1);
    692.             for (int j = 0; j < data.size(); j++) {
    693.                 // 判断是否是标题字段列
    694.                 if (j == 0) {
    695.                     rowi.createCell(j).setCellValue((String) data.get("value" + (j + 1)));
    696.                     // 设置左边字段样式
    697.                     sheet.getRow(i + 1).getCell(j).setCellStyle(styleList.get(0));
    698.                 } else {
    699.                     rowi.createCell(j).setCellValue(Double.valueOf((String) data.get("value" + (j + 1))));
    700.                     // 设置数据样式
    701.                     sheet.getRow(i + 1).getCell(j).setCellStyle(styleList.get(2));
    702.                 }
    703.             }
    704.         }
    705.         return result;
    706.     }
    707.     /**
    708.      * 生成表格样式
    709.      *
    710.      * @return
    711.      */
    712.     private static List<CellStyle> tableStyle() {
    713.         List<CellStyle> cellStyleList = new ArrayList<CellStyle>();
    714.         // 样式准备
    715.         // 标题样式
    716.         CellStyle style = wb.createCellStyle();
    717.         style.setFillForegroundColor(IndexedColors.ROYAL_BLUE.getIndex());
    718.         style.setFillPattern(FillPatternType.SOLID_FOREGROUND);
    719.         style.setBorderBottom(BorderStyle.THIN); // 下边框
    720.         style.setBorderLeft(BorderStyle.THIN);// 左边框
    721.         style.setBorderTop(BorderStyle.THIN);// 上边框
    722.         style.setBorderRight(BorderStyle.THIN);// 右边框
    723.         style.setAlignment(HorizontalAlignment.CENTER);
    724.         cellStyleList.add(style);
    725.         CellStyle style1 = wb.createCellStyle();
    726.         style1.setBorderBottom(BorderStyle.THIN); // 下边框
    727.         style1.setBorderLeft(BorderStyle.THIN);// 左边框
    728.         style1.setBorderTop(BorderStyle.THIN);// 上边框
    729.         style1.setBorderRight(BorderStyle.THIN);// 右边框
    730.         style1.setAlignment(HorizontalAlignment.CENTER);
    731.         cellStyleList.add(style1);
    732.         CellStyle cellStyle = wb.createCellStyle();
    733.         cellStyle.setBorderTop(BorderStyle.THIN);// 上边框
    734.         cellStyle.setBorderBottom(BorderStyle.THIN); // 下边框
    735.         cellStyle.setBorderLeft(BorderStyle.THIN);// 左边框
    736.         cellStyle.setBorderRight(BorderStyle.THIN);// 右边框
    737.         cellStyle.setAlignment(HorizontalAlignment.CENTER);// 水平对齐方式
    738.         // cellStyle.setVerticalAlignment(VerticalAlignment.TOP);//垂直对齐方式
    739.         cellStyleList.add(cellStyle);
    740.         return cellStyleList;
    741.     }
    742. }
    743.  
    展开全文
  • 一个excel有三个sheet用nopi如何做..........如果 HSSFWorkbook hssfworkbook = new HSSFWorkbook(); ISheet sheet = hssfworkbook.CreateSheet(str_SheetName); using (FileStream fs = new FileStream(str_Path,...
  • 数据结构 排序 LeetCode 探索 题库 序号 标题 英文标题 1个 两次总和 2个 加两个数字 ...Excel工作表列标题 172 阶乘尾随零 202 快乐号码 203 删除链接列表元素 204 算素数 205 同构字符串 206 反向链表 217
  • Power-user Premium 是一款来自国外的为微软Office软件量身打造的超级office办公插件,可为本就强大的Word 、Excel以及PowerPoint办公软件赋予更为强悍的增强功能的顶级生产力插件,内置一个包含模板、图标、图表、...
  • IBM实习工作(二)

    2019-07-13 22:58:00
    2019年秋招前夕再次到ibm项目组参加实习两周,这次主要负责的需求是建立牛奶数据池,在二级菜单建立对账单数据池,数据由Excel导入生成。  分析整个需求,主要分为以下几块:  1、牛奶数据池前台页面,需要注意...

     

      2019年秋招前夕再次到ibm项目组参加实习两周,这次主要负责的需求是建立牛奶数据池,在二级菜单建立对账单数据池,数据由Excel导入生成。

      分析整个需求,主要分为以下几块:

        1、牛奶数据池前台页面,需要注意设有一级菜单和二级菜单  2、牛奶数据池数据导入功能,包含数据检验和数据插入功能

      这两块是核心功能,前端使用jquery和bootstrap table技术,后端代码在MVC模式下根据数据导入功能基础上扩展代码,与oracle数据库交互实现数据校验和插入功能。

      在对需求编码过程中,发现了自己在Java基础方面有些地方还有不扎实的地方:

        1、在对象进行比较时使用使用==、equals还是compare;

        2、由一次空指针exception,对java对象创建过程复习;

        3、java数据类型之间的转换以及对象类型的转换;

        4、由一次java.lang.OutOfMemoryError: PermGen space,对jvm的复习总结

      后面使用几篇随笔重点总结一下。

      更新时间2019年7月14日

     

    转载于:https://www.cnblogs.com/bjm1/p/11182506.html

    展开全文
  • 打开“OG语法手册of 超级菜鸟“ ,是个EXCEL 文件。第一行中罗列的是我自己总结的所有语法错误,将光标放在单元格可看见批注中的详细内容。每个题号插入了每道题目的WORD版,点击就可以看到。 建议使用方法: 考试...
  • 企业级CMDB实战课程

    2020-11-09 18:57:21
    硬盘和CPU的管理 对资产硬盘的增删改查操作, 以及导出数据到PDF,Excel,CSV 对资产CPU的增删改查操作, 以及导出数据到PDF,Excel,CSV             资产信息的可视化展示 ...
  • 系统免费提供邮件、七、短信等第三方流行接口 有层次的权限分级,让管理变得轻松方便,自定义不同的组别,分配不同的权限 节省空间资源,同一张图片或同一个文件,在第二次上传时会自动获取原来上传的文件地址,...
  • LINGO软件的学习

    2009-08-08 22:36:50
    LINGO是用来求解线性和非线性优化问题的简易工具。LINGO内置了一种建立最优化模型的语言,可以简便地表达大规模问题,利用LINGO高效的求解器可快速求解并分析结果。 §1 LINGO快速入门 当你在windows下开始运行...
  • 书名:《PHP开发实战1200例(第I卷)》(清华大学出版社.潘凯华.刘中华) PDF格式扫描版,全书分为5篇15章,共899页。2011年1月出版。 全书压缩打包成2部分,这是第1部分。 注:本系列图书的第I、II卷再版时均相应改名...
  • 书名:《PHP开发实战1200例(第I卷)》(清华大学出版社.潘凯华.刘中华) PDF格式扫描版,全书分为5篇15章,共899页。2011年1月出版。 全书压缩打包成2部分,这是第2部分。 注:本系列图书的第I、II卷再版时均相应改名...
  • 易语言5.1 相对于易语言5.0更新说明:  支持静态链接其它编程语言(如C/C++、汇编等)编译生成的静态库(.LIB或.OBJ),但仅限于COFF格式,支持cdecl和stdcall两种函数调用约定。  使用说明如下:函数声明和调用...
  • 「冰河技术」文章分类汇总,P8架构师都在看的技术文章!! 这次,我将 【冰河技术】 微信公众号的文章整理出来了,很多细节的点,可能想得不是很完善,大家可以去【冰河技术】公众号获取或者在公众号内回复【冰河】...
  • 实例059 疱丁解——分析路径字符串函数总结 93 实例060 粉身碎骨——将字符串转为字符数组 95 实例061 万佛朝宗——将字符数组写入到字符串 96 实例062 类型推断——使用var创建隐型局部变量 97 实例063 匿名方法...
  • 实例059 疱丁解——分析路径字符串函数总结 93 实例060 粉身碎骨——将字符串转为字符数组 95 实例061 万佛朝宗——将字符数组写入到字符串 96 实例062 类型推断——使用var创建隐型局部变量 97 实例063 匿名方法...
  • 实例059 疱丁解——分析路径字符串函数总结 93 实例060 粉身碎骨——将字符串转为字符数组 95 实例061 万佛朝宗——将字符数组写入到字符串 96 实例062 类型推断——使用var创建隐型局部变量 97 实例063 匿名方法...

空空如也

空空如也

1
收藏数 20
精华内容 8
关键字:

excel牛插