/**
     * 导入Excel文件数据
     *
     * @param file 将要导入的Excel文件
     * @param fileCheckKeyWord 用于判断导入文件是否正确的关键字符串
     * @param keyX 用于判断导入文件是否正确的关键字符串所在的x坐标位置
     * @param keyY 用于判断导入文件是否正确的关键字符串所在的y坐标位置
     * @param startRow 导入数据开始行数
     * @param startLine 导入数据开始列数
     *
     * @return List《Object[]》
     * @throws Exception
     */
    public static List<Object[]> excelImport(File file, String fileCheckKeyWord, int keyX, int keyY, int startRow, int startLine) throws Exception{
        List<Object[]> dataList = new ArrayList<Object[]>();
        InputStream inputStream = new FileInputStream(file);
        WorkbookSettings wbs = new WorkbookSettings();
        wbs.setSuppressWarnings(true);
        Workbook book = Workbook.getWorkbook(inputStream, wbs);
        Sheet sh = book.getSheet(0);
        //判断选择excel文件是否正确
        String typeContent = sh.getCell(keyX, keyY).getContents().trim();
        if(!typeContent.equals(fileCheckKeyWord)){
            return dataList;
        }
        //行数
        int rows = sh.getRows();
        if(rows >= 65536){//超出 excel 03最大行数
            return dataList;
        }
        //列数
        int lines = sh.getColumns();
        //判断导入的数据是否有误
        Object[] dataObjArr = null;
        for(int i = startRow; i <= rows; i++){
            dataObjArr = new Object[lines - startLine + 1];
            for(int j = startLine; j <= lines; j++){
                String content = sh.getCell(j, i).getContents().trim();
                if(ComFun.strNull(content) && !content.trim().equals("")){
                    dataObjArr[j - startLine] = content;
                } else {
                    dataObjArr[j - startLine] = "";
                }
            }
        }
        return dataList;
    }

/**
     * 导出EXCEL文件
     *
     * @param fileName 导出文件名 (为NULL时,文件名称按照时间戳生成)
     * @param headCellNames 头部标题名称组
     * @param dataList 数据List,与参数headCellNames对应
     */
    public static void excelExport(String fileName,
            String[] headCellNames, List<Object[]> dataList) throws IOException, WriteException {
        if(ComFun.strNull(dataList) && dataList.size() > 0){
            if(!ComFun.strNull(fileName)){
                fileName = DateFormatUtil.dateToStr(new Date(), DateFormatUtil.TYPE4);
            }
            String[] cellNames = new String[headCellNames.length + 1];
            cellNames[0] = "序号";
            for(int i=0; i<headCellNames.length; i++){
                cellNames[i+1] = headCellNames[i];
            }
            WritableWorkbook book = Workbook.createWorkbook(new File("C:\\ACjba\\fileDownload\\" + fileName + ".xls"));// 创建文件
            WritableSheet sheet = book.createSheet(fileName, 0);// 创建工作薄
            sheet.setName(fileName);
            sheet.getSettings().setVerticalFreeze(2);// 冻结前两行
            /* 开始创建sheet第一行 */
            // 标题字体、样式
            WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 12,
                    WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE,
                    Colour.BLACK);// 设置标题字体
            WritableCellFormat titleFormat = new WritableCellFormat(titleFont);// 设置标题格式
            titleFormat.setAlignment(Alignment.CENTRE);
            titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            // 合并单元格
            sheet.mergeCells(1, 0, cellNames.length, 0);
            // 设置行高
            sheet.setRowView(0, 800, false);// 40磅
            // label理解为sheet中的单元格,此处在第1列0行加入指定内容、样式
            Label titleLabel = new Label(1, 0, fileName, titleFormat);
            // 将label加入到sheet中,第一行创建完成
            sheet.addCell(titleLabel);
    
            /* 开始创建第二行 */
            // 表头字体、样式
            WritableFont cellFont = new WritableFont(WritableFont.ARIAL, 9,
                    WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
                    Colour.BLACK);
            WritableCellFormat cellFormat = new WritableCellFormat(cellFont);
            // 设置自动换行
            cellFormat.setWrap(true);
            cellFormat.setAlignment(Alignment.CENTRE);
            cellFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            cellFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 设置边框
            // 设置列宽
            for (int i = 1; i <= cellNames.length; i++) {
                sheet.setColumnView(i, 20);
                sheet.setRowView(1, 440);// 22磅
                sheet.addCell(new Label(i, 1, cellNames[i - 1], cellFormat));
            }
    
            // 创建第三行
            sheet.setRowView(2, 440);// 22磅
            /* 循环创建传入集合(第四行以后) */
            WritableFont bodyFont = new WritableFont(WritableFont.ARIAL, 9,
                    WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE,
                    Colour.BLACK);
            WritableCellFormat bodyFormat = new WritableCellFormat(bodyFont);
            // 设置自动换行
            bodyFormat.setWrap(true);
            bodyFormat.setAlignment(Alignment.CENTRE);
            bodyFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
            bodyFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);// 设置边框
            int r = 2;
            for (int i=0;i<dataList.size();i++) {
                sheet.setRowView(r, 440);
                sheet.addCell(new Label(1, r, String.valueOf(r - 1), bodyFormat));// 序号
                for(int j=2; j<cellNames.length+1; j++){
                    sheet.addCell(new Label(j, r, String.valueOf(dataList.get(i)[j-2]), bodyFormat));
                }
                r++;
            }
            book.write();
            book.close();
        }
    }

Excel文件导入导出的更多相关文章

  1. NodeJs之EXCEL文件导入导出MongoDB数据库数据

    NodeJs之EXCEL文件导入导出MongoDB数据库数据 一,介绍与需求 1.1,介绍 (1),node-xlsx : 基于Node.js解析excel文件数据及生成excel文件. (2),ex ...

  2. Excel导入导出工具(简单、好用且轻量级的海量Excel文件导入导出解决方案.)

    Excel导入导出工具(简单.好用且轻量级的海量Excel文件导入导出解决方案.) 置顶 2019-09-07 16:47:10 $9420 阅读数 261更多 分类专栏: java   版权声明:本 ...

  3. Excel文件导入导出(基于Nodejs、exceljs)

    Excel导入.导出是大多数项目的管理后台必备功能.几年来使用过多个该功能的实现包,最近一次开发该功能,突然发现一个人气极高(3000+)的包,这里记录一下使用方法. 大凡厉害的技术的文档咋一看都想字 ...

  4. C# excel文件导入导出

    欢迎关注微信公众号 C#编程大全 这里有更多入门级实例帮你快速成长 在C#交流群里,看到很多小伙伴在excel数据导入导出到C#界面上存在疑惑,所以今天专门做了这个主题,希望大家有所收获! 环境:wi ...

  5. postman 测试Excel文件导入导出功能

    1.导入的测试方法 选择form-data,key值填写方法对应的参数,选择File,Value处上传文件即可. 2. 导出的测试方法 在导出文件的时候,响应结果是乱码,然后在测试的时候选择下载,下载 ...

  6. 用NODEJS处理EXCEL文件导入导出,文件上传

    參考文章 http://librajt.github.io/2013/08/04/handle-excel-file-with-nodejs/ 对照了 ExcelJS ,https://github. ...

  7. CSV文件导入导出MySQL

    使用SQLyog 工具导入文件数据到MySQL: Excel文件导入导出: 需要驱动:Microsoft Office 2007驱动 导入需要注意的问题:1.Excel里数值列,默认导入会变成浮点型. ...

  8. c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出

    c# .Net :Excel NPOI导入导出操作教程之读取Excel文件信息及输出 using NPOI.HSSF.UserModel;using NPOI.SS.UserModel;using S ...

  9. Laravel Excel 实现 Excel-CSV 文件导入导出功能

    Laravel Excel 是一款基于 PHPExcel 开发的Laravel框架专用的 Excel/CSV 文件导入导出功能的扩展包,用起来的非常方便. 它的 Github 地址是:https:// ...

随机推荐

  1. java面试题(自创)

    1.最后输出的是啥? String s = "hello"; final String str = s; s = "world"; System.out.pri ...

  2. codeforces 371c

    #include<stdio.h> int main() { char s[200]; __int64  r,nb,ns,nc,pb,ps,pc,i,sum,tob,tos,toc; wh ...

  3. Hihocoder 1333 (splay)

    Problem 平衡树 splay2 题目大意 维护一个序列,支持四种操作: 操作1:添加一个数,编号为x,权值为y. 操作2:删除编号在区间[x,y]内的数. 操作3:将编号在区间[x,y]内的数的 ...

  4. $scope的生命周期

    model mutation 模型改变 model observation 模型观察 scope destruction scope结束 神奇的scope,一个angular应用只有一个scope,一 ...

  5. WeixinJSBridge 微信

    <!DOCTYPE html> <html> <head><title>微信WeixinJSBridge API</title> <m ...

  6. 如何使用PHP显示在线Word文档

    在线生成FlashPaper文档 1 安装 FlashPaper2,最好下载绿色版的FlashPaper软件,如下所示,先点击初始化.bat即开始绿化,然后双击"FlashPrinter.e ...

  7. Office EXCEL如何批量把以文本形式存储的数字转换为数字

    如果"以文本形式存储的数字"不多,则点击右边的感叹号,转换为数字即可.但是如果有几万个单元格就不能这样做了.   先把他旁边的一列填充为1(选中该列,然后按Ctrl+F查找,按列查 ...

  8. C# DateTime.Now和DateTime.UtcNow的区别

    DateTime.UtcNow.ToString()输出的是0时区的事件(通俗点就是格林威治时间的当前时间),DateTime.Now.ToString()输出的是当前时区的时间,我们中国使用的是东八 ...

  9. dbms_metadata.get_ddl的用法

    --GET_DDL: Return the metadata for a single object as DDL. -- This interface is meant for casual bro ...

  10. 放大的X(杭电2565)

    /*放大的X 请你编程画一个放大的'X'. Input 输入数据第一行是一个整数T,表示有T组測试数据: 接下来有T行,每行有一个正奇数n(3 <= n <= 79).表示放大的规格. O ...