精华内容
下载资源
问答
  • POI对默认对中文的支持不好,如果不做处理,中文在输出的文件中是乱码处理方法如下: cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("武汉大学"); 以上为近期项目中的问题,做个...

    POI对默认对中文的支持不好,如果不做处理,中文在输出的文件中是乱码处理方法如下:

    		    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    		    cell.setCellValue("武汉大学");

     

    以上为近期项目中的问题,做个备忘

    展开全文
  • Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能,下面这篇文章主要给大家介绍了关于利用POI生成EXCEL文件的相关资料,需要的朋友可以...
  • 使用POI生成Excel文件及使用POI在EXCEL文件中插入图片的方法.pdf
  • java代码调用poi架包, 把数据生成excel文件, 导出到文件
  • POI生成EXCEL文件

    千次阅读 2018-06-26 09:31:57
    根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头(head),数据(data) ,表尾(foot) 明确区分 二、效果预览 三...

    一、背景

    根据指定格式的JSON文件生成对应的excel文件,需求如下

    • 支持多sheet
    • 支持单元格合并
    • 支持插入图片
    • 支持单元格样式可定制
    • 需要 标题(title),表头(head),数据(data) ,表尾(foot) 明确区分

    二、效果预览

    demo图,qq:464884492

    三、数据格式

    由于是生成Excel文件,这里值考虑生成xlsx格式的Excel文件,数据多表头默认考虑使用 | 表示,不在使用colspan rowspan作为。如需要表示两列两行,第一列合并表头格式为: A|B,A|C生成的表格为

    A
    BC

    前端通过post的方式将需要生成的数据构造成符合要求的JSON文件提交跟后台。根据以上需求定义JSON格式如下

     

    
    {
        "saveName": "生成Excel的文件名.xlsx",
        "userStyles": [{
            "id": "1", //不能出现重复,在需要设置单元样式的地方,可以直接将style赋值为此值
            "style": {
                "font": { //设置字体基本格式
                    "blod": true,//是否加粗
                    "italic": true, //是否倾斜
                    "color": "#FF0000",//字体颜色
                    "name": "微软雅黑", //字体名称
                    "height": 20 //大小
                 }, 
                "fmtStr": "", //单元格格式,#,##0.00_);#,##0.00;0 千分位
                "align": "",//水平对齐方式 left right center
                "valign": "",//垂直对齐方式 top center bottom
                "borderColor": "", //设置边框颜色 如 #FF0000
                "bgColor": "" //设置单元格填充颜色 
            }
        }],
        "sheets": [{
            "sheetName": "", //sheet名称
            "title": [], // 对应Sheet标题区域数据
            "titleMerge": [], //对应Sheet标题区域合并信息
            "head": [{}], //表头信息
            "data": [], //数据信息
            "dataMerge": [], //数据合并信息
            "foot": [], //表尾信息
            "footMerge": [], //表尾合并信息
            "img": [] //图片信息,需要将图片转换base64
        }]
    }

    简要说明

    • head 数组中为JSON对象格式为
    
    {
        "name": "A|B", //表头名称,多表头用|分割
        "type": "str", //此列数据类型 str num ,在excel中日期也是数字类型,通过fmtStr,显示为日期格式
        "field": "F_FIELD1", //备用字段,可不用
        "style": { //此列数据为列默认样式,可以是Style对象,也可以是在userStyles中定义的id值
            "align": "center"
        }
    }
    • 在数组 title data foot 中,列表中的数据,可以是一个单独的值如 1,"a",也可以是一个对象,当为对象时,格式为
    
    {
        "value": "", //单元格具体的值
        "type": "",  //单元格类型,默认str 
        "style": {} //单元格样式 可以是Style对象,也可以是在userStyles中定义的id值,如果没设置,默认取head总此列对应的style
    }
    • titleMerge、dataMerge、footMerge数组值为逗号分隔的字符串,其含义为"开始行,结束行,开始列,结束列",索引从0开始。如在title中有两行三列数据,现在需要合并一行两列数据对应的值为"0,0,0,1"
    • img数组中值为对象,格式
    
    {
        "col": 1, //图片开始列
        "row": 0, //开始行
        "colSpan": 1,//列跨度,最小值1
        "rowSpan": 2, //行跨度,最小值1
        "data": "" //base64图片数据如: "data:image/png;base64,iVBO...ggg=="
    }

    四、关键实现

    07以后的Excle文件,其实是一个压缩包,里边是一个个的xml文件,其中每一个sheet是一个xml文件,样式是一个xml文件,图片是对应的图片文件,放在media文件夹中,所以,代码思路依次为

    • 构建 XSSFWorkbook 对象
    • 生成样式
    • 依次生成,title head data foot 行数据
    • 依次处理合并信息 titlemerge datamerge footmerge
    • 添加图片信息
    • 输出文件流

    功能代码如下

    
    @Override
        public void buildOutputStream() throws FileProducerException {
            // 处理传入的JSON数据
            sheets = this.jsonData.getJSONArray(this.SHEETS);
            Iterator<Object> sheetIter = sheets.iterator();
            if (sheets.isEmpty()) {
                this.responseData.setErrcode(1001);
                this.responseData.setSuccess(false);
                this.responseData.setErrmsg("无数据可生成");
                throw new FileProducerException();
            }
            wb = new XSSFWorkbook();
            // 建立全局格式
            JSONArray userStyles = this.jsonData.getJSONArray(this.USERSTYLES);
            this.initUserStyles(userStyles);
            this.initDefaultHeadStyle();
    
            XSSFSheet ws;
            JSONObject sheet;
            JSONArray sheetData;
            JSONArray sheetTitle;
            JSONArray sheetHead;
            JSONArray sheetFoot;
            JSONArray sheetImgs;
    
            String sheetName;
            int sheetIndex = 0;
            while (sheetIter.hasNext()) {
                sheet = (JSONObject) sheetIter.next();
                // 获取sheet名称
                sheetName = sheet.getString(this.SHEET_NAME);
                ws = wb.createSheet();
                if (StringUtils.isNotBlank(sheetName)) {
                    wb.setSheetName(sheetIndex, sheetName);
                }
                int sheetRowIndex = 0;
                sheetTitle = sheet.getJSONArray(this.SHEET_TITLE);
                this.setMergeCells(ws, sheet.getJSONArray(this.SHEET_TITLE_MERGE),
                        sheetRowIndex);
                sheetRowIndex = this.createRandom(ws, sheetTitle, sheetRowIndex);
    
                sheetHead = sheet.getJSONArray(this.SHEET_HEAD);
                sheetRowIndex = this.createHeadColumn(ws, sheetHead, sheetRowIndex);
    
                this.setMergeCells(ws, sheet.getJSONArray(this.SHEET_DATA_MERGE),
                        sheetRowIndex);
                sheetData = sheet.getJSONArray(this.SHEET_DATA);
                sheetRowIndex = this.createData(ws, sheetData, sheetRowIndex);
    
                sheetFoot = sheet.getJSONArray(this.SHEET_FOOT);
                this.setMergeCells(ws, sheet.getJSONArray(this.SHEET_FOOT_MERGE),
                        sheetRowIndex);
                sheetRowIndex = this.createRandom(ws, sheetFoot, sheetRowIndex);
    
                sheetImgs = sheet.getJSONArray(this.SHEET_IMG);
    
                this.setSheetImages(ws, sheetImgs);
            }
    
            // 返回输出流
            try {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                wb.write(os);
                this.outStreams.add(os);
            } catch (IOException e) {
                throw new FileProducerException(e.getMessage(), e.getCause());
            }
        }

    生成单元格样式对象,包括字体 边框 背景 对齐方式

    
    private XSSFCellStyle createCellStyle(JSONObject style) {
    
            XSSFCellStyle cellStyle = wb.createCellStyle();
            // 设置字体
            JSONObject font = style.getJSONObject(this.STYLE_FONT);
            Font excelFont = this.createFont(font);
            if (excelFont != null) {
                cellStyle.setFont(excelFont);
            }
            // border统一黑色
            cellStyle.setBorderBottom(BorderStyle.THIN);
            cellStyle.setBorderTop(BorderStyle.THIN);
            cellStyle.setBorderLeft(BorderStyle.THIN);
            cellStyle.setBorderRight(BorderStyle.THIN);
    
            String borderColor = style.getString(this.BORDER_COLOR);
            if (StringUtils.isNotBlank(borderColor)) {
                XSSFColor xfBorderColor = new XSSFColor(new Color(Integer.parseInt(
                        borderColor.substring(1), 16)));
                cellStyle.setBorderColor(BorderSide.BOTTOM, xfBorderColor);
                cellStyle.setBorderColor(BorderSide.TOP, xfBorderColor);
                cellStyle.setBorderColor(BorderSide.LEFT, xfBorderColor);
                cellStyle.setBorderColor(BorderSide.RIGHT, xfBorderColor);
            }
            // 背景色
            String bgColor = style.getString(this.BACKGROUND_COLOR);
            if (StringUtils.isNotBlank(bgColor)) {
                XSSFColor cellBgColor = new XSSFColor(new Color(Integer.parseInt(
                        bgColor.substring(1), 16)));
                cellStyle.setFillForegroundColor(cellBgColor);
                cellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
            }
            // 对齐方式
            String hAlignment = style.getString(this.HALIGNMENT);
            if (StringUtils.isNotBlank(hAlignment))
                cellStyle.setAlignment(HorizontalAlignment.valueOf(hAlignment
                        .toUpperCase()));
            String vAlignment = style.getString(this.VALIGNMENT);
            if (StringUtils.isNotBlank(vAlignment))
                cellStyle.setVerticalAlignment(VerticalAlignment.valueOf(vAlignment
                        .toUpperCase()));
            // 自动换行TRUE
            cellStyle.setWrapText(true);
    
            // 格式
            String fmt = style.getString(this.FMTSTRING);
            if (StringUtils.isNotBlank(fmt))
                cellStyle.setDataFormat(wb.createDataFormat().getFormat(fmt));
            return cellStyle;
        }

    创建字体样式

    
    private Font createFont(JSONObject fontCfg) {
            if (fontCfg == null)
                return null;
            XSSFFont font = wb.createFont();
            font.setFontName(fontCfg.getString(this.FONT_NAME));
            Boolean fontBoole = fontCfg.getBoolean(FONT_BLOD);
            if (fontBoole != null)
                font.setBold(fontBoole.booleanValue());
            fontBoole = fontCfg.getBoolean(this.FONT_ITALIC);
            if (fontBoole != null)
                font.setItalic(fontBoole.booleanValue());
            fontBoole = fontCfg.getBoolean(this.FONT_UNDERLINE);
            if (fontBoole != null && fontBoole.booleanValue() == true)
                font.setUnderline(FontUnderline.SINGLE.getByteValue());
            Short fontHeight = fontCfg.getShort(this.FONT_HEIGHT);
            if (fontHeight != null)
                font.setFontHeightInPoints(fontHeight);
            String colorStr = fontCfg.getString(this.FONT_COLOR);
            if (colorStr != null) {
                font.setColor(new XSSFColor(new Color(Integer.parseInt(
                        colorStr.substring(1), 16))));
            }
            return font;
        }

    处理表头,表过多表头处理,采用 | 分割的方式,传入head长度为列数据,name中有几个 | 就知道表头有几行。所以针对表头处理有以下几个步骤

    • 生成默认列样式
    • 填充所有列数据,求出最大行数
    • 横向合并内容相同的单元
    • 纵向合并空白的单元格
    
    private int createHeadColumn(XSSFSheet ws, JSONArray sheetHead,
                int sheetRowIndex) {
            if (sheetHead == null)
                return sheetRowIndex;
            Iterator<Object> headIter = sheetHead.iterator();
            JSONObject curHead = null;
            int colIndex = 0;
            Object colStyle = null;
            int colSize = sheetHead.size();
            headTypes = new String[colSize];
            headCellStyleKeys = new String[colSize];
            int[] headColLevel = new int[colSize];
            String colName = null;
            String[] colNameAry = null;
            int maxLevel = 0;
            int colLevel = 0;
            XSSFCell headCell = null;
            ArrayList<ArrayList<String>> headValueList = new ArrayList<ArrayList<String>>();
            while (headIter.hasNext()) {
                curHead = (JSONObject) headIter.next();
                // 处理默认样式
                if (curHead.containsKey(this.COLUMN_STYLE)) {
                    colStyle = curHead.get(this.COLUMN_STYLE);
                    if (colStyle instanceof JSONObject) {
                        headCellStyleKeys[colIndex] = this.COLUMNSTYLE_PREV
                                + colIndex;
                        this.userStyles.put(headCellStyleKeys[colIndex],
                                this.createCellStyle((JSONObject) colStyle));
                    } else if (this.userStyles.containsKey(colStyle)) {
                        headCellStyleKeys[colIndex] = (String) colStyle;
                    }
                }
                // 处理默认列宽
                if (curHead.containsKey(this.COLUMN_WIDTH)) {
                    ws.setDefaultColumnWidth(pixToExcelWdith(curHead
                            .getIntValue(this.COLUMN_WIDTH)));
                }
                // 保存列样式
                if (curHead.containsKey(this.COLUMN_TYPE)) {
                    headTypes[colIndex] = curHead.getString(this.COLUMN_TYPE);
                } else {
                    headTypes[colIndex] = this.CELLTYPESTRING;
                }
                // 处理多表头
                colName = curHead.getString(this.COLUMN_NAME);
                colNameAry = colName.split("\\|");
                colLevel = colNameAry.length;
                headColLevel[colIndex] = colLevel;
                if (colLevel > maxLevel) {
                    maxLevel = colLevel;
                }
                for (int i = 0; i < colLevel; i++) {
                    if (headValueList.size() <= i) {
                        headValueList.add(new ArrayList<String>());
                    }
                    headValueList.get(i).add(colIndex, colNameAry[i]);
                    XSSFRow row = ws.getRow(sheetRowIndex + i);
                    if (row == null) {
                        row = ws.createRow(sheetRowIndex + i);
                    }
                    headCell = row.createCell(colIndex);
                    headCell.setCellValue(colNameAry[i]);
                    headCell.setCellStyle(this.userStyles.get(this.HEADSTYLE_KEY));
                }
                colIndex++;
            }
    
            // 横向合并
            Iterator<ArrayList<String>> a = headValueList.iterator();
            JSONArray headMerge = new JSONArray();
            String prev = "";
            String curent = null;
            int lRowIndex = 0;
            int startCol = 0;
            int mergeCol = 0;
            ArrayList<String> columnInfo = null;
            while (a.hasNext()) {
                startCol = 0;
                mergeCol = 0;
                prev = "";
                columnInfo = a.next();
                // 第三列才能知道,第一列和第二列是否合并
                columnInfo.add("");
                Iterator<String> b = columnInfo.iterator();
                XSSFCell lastRowCell = null;
                while (b.hasNext()) {
                    curent = b.next();
                    if (lRowIndex > 0) {
                        lastRowCell = ws.getRow(sheetRowIndex + lRowIndex - 1)
                                .getCell(startCol);
                    }
                    if (prev.equalsIgnoreCase(curent) && lRowIndex == 0) {
                        ws.getRow(sheetRowIndex + lRowIndex).getCell(startCol)
                                .setCellType(Cell.CELL_TYPE_BLANK);
                        mergeCol++;
                    } else if (prev.equalsIgnoreCase(curent)
                            && lRowIndex > 0
                            && StringUtils
                                    .isBlank(lastRowCell.getStringCellValue())) {
                        ws.getRow(sheetRowIndex + lRowIndex).getCell(startCol)
                                .setCellType(Cell.CELL_TYPE_BLANK);
                        mergeCol++;
                    } else {
                        if (mergeCol > 0 && startCol > 0) {
                            headMerge.add(String.format("%d,%d,%d,%d", lRowIndex,
                                    lRowIndex, startCol - mergeCol - 1,
                                    startCol - 1));
                            mergeCol = 0;
                        }
                    }
                    startCol++;
                    prev = curent;
                }
                lRowIndex++;
            }
            for (int i = 0; i < colSize; i++) {
                if (headColLevel[i] < maxLevel) { // 存在列合并
                    headMerge.add(String.format("%d,%d,%d,%d", headColLevel[i] - 1,
                            maxLevel - 1, i, i));
                    for (int r = headColLevel[i]; r < maxLevel; r++) {
                        ws.getRow(sheetRowIndex + r)
                                .createCell(i)
                                .setCellStyle(
                                        this.userStyles.get(this.HEADSTYLE_KEY));
                    }
                }
            }
    
            this.setMergeCells(ws, headMerge, sheetRowIndex);
            return sheetRowIndex + maxLevel;
        }

    添加图片,默认采用单元格描点方式,将图片固定指定的单元格区域内

    
    private void addImg(XSSFSheet ws, JSONObject img, XSSFCreationHelper cHelper) {
            String imgBase64 = img.getString(this.SHEET_IMG_DATA);
            if (StringUtils.isBlank(imgBase64))
                return;
            String[] imgary = imgBase64.split(",");
            System.out.println(imgary[0]);
            byte[] imgByte = Base64.decodeBase64(imgary[1]);
            int imgIdx = wb.addPicture(imgByte, Workbook.PICTURE_TYPE_JPEG);
            XSSFDrawing drawImg = ws.createDrawingPatriarch();
            XSSFClientAnchor anchor = cHelper.createClientAnchor();
            int col = img.getIntValue(this.SHEET_IMG_COL);
            int row = img.getIntValue(this.SHEET_IMG_ROW);
            anchor.setCol1(col);
            anchor.setRow1(row);
            XSSFPicture pict = drawImg.createPicture(anchor, imgIdx);
            Integer colSpan = img.getInteger(this.SHEET_IMG_COLSPAN);
            if (colSpan == null)
                colSpan = 1;
            Integer rowSpan = img.getInteger(this.SHEET_IMG_ROWSPAN);
            if (rowSpan == null)
                rowSpan = 1;
            pict.resize(colSpan, rowSpan);
        }

    五、总结

    这次通过传入JSON对象生成样式丰富的excel文件,对于POI操作office文档又更加熟悉一些。相对于解析excel文档,生成就不用考虑文件格式,如:兼容2003格式,考虑大文件sax方式解析。相对于js前端生成excel文件,增加了对生成后文件二次加工的可能性,所以在功能入口中,采用了生成二进制流的方式。文件生成好后,可以继续发送邮件,上传ftp等操作。
    重点说明

    • 对于各数据区域数据,保持区域数据独立性(数据索引值)
    • 对于图片开始行和开始列,索引值是针对一个完整的sheet
    • 对于表头区域,多表头采用 | 分割,减少部分传输数据
    • excel中style为所有sheet共享样式。

    转载请注明来源

    作者:杨瀚博

    QQ:464884492

    https://www.cnblogs.com/yfrs/p/poiexcel.html

    展开全文
  • 今天遇到一个问题,poi生成表格文件,生成的表格文件在数据量比较多时文件不能正常打开,但数据量比较少时文件可以正常打开 出现这种问题的原因是,应该不需要考虑是否是数据或者样式的问题,因为数据量少时文件...

    今天遇到一个问题,poi生成表格文件,生成的表格文件在数据量比较多时文件不能正常打开,但数据量比较少时文件可以正常打开

    出现这种问题的原因是,应该不需要考虑是否是数据或者样式的问题,因为数据量少时文件可以正常打开,那么这个问题的主要原因出在了文件下载上,代码如上图所示。

    问题解决:response中增加content-length时,不应该使用文件的长度,应该使用字节流数组的长度,因为当数据量较大,样式就会多,样式多了就会超过文件file的长度限制,就会出现文件打不开的情况。

    展开全文
  • csv文件是什么?CSV(逗号分隔值文件格式)逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是...

    csv文件是什么?

    CSV

    (逗号分隔值文件格式)

    逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。通常都是纯文本文件。建议使用WORDPAD或是记事本(NOTE)来开启,再则先另存新档后用EXCEL开启,也是方法之一。

    java生成csv文件

    声明:

    Q: csv文件如何替代poi生成excel文件?

    A:csv文件也是可以用excel方式打开形成表格

    excel打开


    记事本打开:


    为什么用csv 代替poi生产excel 因为csv比较简单只是字符串逗号分隔,生成的速度很快对大量数据的导出来来说比poi生产excel的性能好一些


    生成csv文件的工具类

    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.OutputStreamWriter;
    import java.util.List;
    
    /**
     *
     * CSV文件导出工具类
     *
     * @author qixin
     * @description TODO
     * @data 2018/7/10 19:25
     * Version 1.0
     */
    public class CSVUtil{
    
        /**
         * CSV文件生成方法
         * @param head
         * @param dataList
         * @param outPutPath
         * @param filename
         * @return
         */
        public static File createCSVFile(List<Object> head, List<List<Object>> dataList,
                                         String outPutPath, String filename) {
    
            File csvFile = null;
            BufferedWriter csvWtriter = null;
            try {
                csvFile = new File(outPutPath + File.separator + filename + ".csv");
                File parent = csvFile.getParentFile();
                if (parent != null && !parent.exists()) {
                    parent.mkdirs();
                }
                csvFile.createNewFile();
    
                // GB2312使正确读取分隔符","
                csvWtriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
                        csvFile), "GB2312"), 1024);
                // 写入文件头部
                writeRow(head, csvWtriter);
    
                // 写入文件内容
                for (List<Object> row : dataList) {
                    writeRow(row, csvWtriter);
                }
                csvWtriter.flush();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    csvWtriter.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return csvFile;
        }
    
        /**
         * 写一行数据方法
         * @param row
         * @param csvWriter
         * @throws IOException
         */
        private static void writeRow(List<Object> row, BufferedWriter csvWriter) throws IOException {
            // 写入文件头部
            for (Object data : row) {
                StringBuffer sb = new StringBuffer();
                String rowStr = sb.append("\"").append(data).append("\",").toString();
                csvWriter.write(rowStr);
            }
            csvWriter.newLine();
        }
    }
    

    测试类:

     /**
         * 测试数据
         */
        @SuppressWarnings({ "rawtypes", "unchecked" })
        @Test
        public void testCsv(){
            List<Object> exportData = new ArrayList<Object>();
            exportData.add("第一列");
            exportData.add("第二列");
            exportData.add("第三列");
            List<List<Object>> datalist = new ArrayList<List<Object>>();
            List<Object> data=new ArrayList<Object>();
            data.add("111");
            data.add("222");
            data.add("333");
            List<Object> data1=new ArrayList<Object>();
            data1.add("444");
            data1.add("555");
            data1.add("666");
            datalist.add(data);
            datalist.add(data1);
            String path = "c:/export/";
            String fileName = "文件导出";
            File file = CSVUtil.createCSVFile(exportData, datalist, path, fileName);
            String fileName2 = file.getName();
            System.out.println("文件名称:" + fileName2);
        }


    结束

    感谢观看

    展开全文
  • Java使用POI生成Excel文件

    千次阅读 2018-02-09 23:37:48
    生成简单Excel文件 案例:学生成绩单 使用模板生成学生成绩单 一、代码地址 点击此处,跳转到本次演示的Demo源码地址 二、生成简单Excel文件 1.导入Jar包 普通项目: Maven项目: 2.操作POI的七个...
  • Java使用poi生成excel文件

    千次阅读 2018-12-26 15:58:23
    生成excel表格导出是经常遇到的操作,我们使用poi生成excel文件。 maven依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&gt;poi&...
  • 最近在做一个功能,用户在付费购买后生成一批文档详情给用户下载,并且在付费之前可以预览部分文档,那么首先就是生成excel文件放在服务器的某个目录,然后把文件名路径存在订单表中,当用户付费后就可以根据订单表...
  • 使用POI生成Excel文件 Apache的Jakata项目的POI子项目,目标是处理ole2对象。 POI可以到 http://www.apache.org/dyn/closer.cgi/jakarta/poi/下载。 编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf...
  • poi 生成 excel 文件 和 数据连接池
  • 博文链接:https://code.iteye.com/blog/238085
  • 使用POI生成Excel文件

    千次阅读 2011-12-26 10:20:00
    Apache POI 是用Java编写的免费开源的跨平台的 Java API,提供对Microsoft Office格式档案读和写的功能。 使用POI导出EXCEL的例子很多,这里列出一...我在此例子上进行了改造,实现了在一个Excel文件中保存两个Shee
  • 1.先在本地生成一个文件,然后将对象写入文件里,然后再获取文件的输入流,然后调用方法上传到云 XSSFWorkbook wb = new XSSFWorkbook(); ….. File file = new File(EXCEL_DIR + fname); // 创建文件夹 Files....
  • 使用POI生成Excel文件,可以自动调整excel列宽,导出文件
  • POI是apache提供的可以操作word文档的第三方jar。POI能操作word是使用XWPFDocument对象 主要操作 pom 依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</...
  • poi生成excel文件中文乱码问题

    万次阅读 2015-03-18 17:52:44
    利用POI生成excel文件,在本机Windows测试成功,发布到linux服务器上,生成的文件中文有部分是乱码。项目的编码是utf-8,数据库里的编码是gbk,一般Windows中文系统的编码是gb2312,linux系统是utf-8,用到linux...
  • 使用POI生成的excel添加文件属性
  • POI生成Web版Word文件

    千次阅读 2014-10-27 17:38:03
    POI生成Web版Word文件   1 通过URL的输入流实现 2 直接把Html文本写入到Word文件   所谓的使用POI生成Web版Word文件是指利用POI将Html代码插入到Word文件中使之呈现出Html代码对应的Web样式。下面将介绍两...
  • 本文为结合参考资料整合而来。 第一步导包: 三个jar: poi poi-ooxml poi-ooxml-schemasmaven: <poi.version>3.12</poi.version> <groupId>org.apache.poi</groupId>
  • 最近由于工作中需要使用poi生成对应的pptx文件,就对照api文档进行研究了一下,api文档也是英文版的,很多东西感觉描述的不是那么清晰,比较耗费精力。在此分享一下生成方法以及一点问题的解决。其实在生成pptx文件...
  • 1。 package com.jnpc.protect.radiation.action; import java.io.FileOutputStream; import java.io.IOException; import net.sf.json.JSONArray; import net.sf.json.JSONObject;...import org.apache.poi.hssf.u
  • Java用POI实现根据Excel表格模板生成新的Excel并实现数据输出...
  • poi生成的excel文件打开以后大小改变了,关键是,如果不打开excel的话,用SAX去读已经生成的这个excel,得到的数据是不准确的,打开以后才能读准,有什么好的解决办法么
  • poi生成excel文件(通用方法)

    千次阅读 2018-04-26 16:02:19
    public class ExcelCreateUtil { private static final Logger log = LoggerFactory.getLog(ExcelCreateUtil.class);... * 生成 excel 文件 * * @param resulsts excel 内容 * @param head...
  • java实现poi模板生成PPT文件代码:两个迭代版本。java实现poi模板生成PPT文件代码:两个迭代版本。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,356
精华内容 10,142
关键字:

poi生成文件