/**
     * 导入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. 页面中插入视频的方法---video/embed/iframe总结

    1. video标签 当前主流的方法当然是HTML5中的video标签了,但是 当前,video 元素只支持三种视频格式: Ogg = 带有 Theora 视频编码和 Vorbis 音频编码的 Ogg ...

  2. BNUOJ 2461 Anniversary party

    Anniversary party Time Limit: 1000ms Memory Limit: 65536KB This problem will be judged on PKU. Origi ...

  3. [luoguP2904] [USACO08MAR]跨河River Crossing(DP)

    传送门 f[i] 表示送前 i 头牛过去再回来的最短时间 f[i] = min(f[i], f[j] + sum[i - j] + m) (0 <= j < i) ——代码 #includ ...

  4. reids桌面管理工具:RedisDesktopManager下载、使用

    概要:一款好用的Redis桌面管理工具,支持命令控制台操作,以及常用,查询key,rename,delete等操作. 下载软件,请点击下面链接,进入下载页,选择对应版本: https://redisd ...

  5. 7、Java并发性和多线程-如何创建并运行线程

    以下内容转自http://ifeve.com/creating-and-starting-java-threads/: Java线程类也是一个object类,它的实例都继承自java.lang.Thr ...

  6. WCF 配置文件中的MaxStringContentLength & MaxReceivedMessageSize

    中午测试员在测试系统模块时发现无法通过WCF从服务器下载数据,检查配置文件后,建议开发人员修改站点的WEB.CONFIG文件,具体修改对比如下: 旧的: <binding name=" ...

  7. MAPZONE GIS SDK接入Openlayers3之一——矢量数据集接入

    在选择开源前端GIS框架的时候,定下来MapBox和Openlayers3.起初被MapBox美观的地图显示效果所吸引,研究后发现其实现机制与MAPZONE GIS SDK相差深远,不如Openlay ...

  8. 配置类Configuration怎样使用

    public class CorsConfiguration { /** * Wildcard representing <em>all</em> origins, metho ...

  9. 【Android】自己定义圆形ImageView(圆形头像 可指定大小)

    近期在仿手Q的UI,这里面常常要用到的就是圆形头像,看到 在android中画圆形图片的几种办法 这篇文章,了解了制作这样的头像的原理.只是里面提供的方法另一个不足的地方就是不能依据实际需求改变图片的 ...

  10. Spring技术内幕:Spring AOP的实现原理(五)

    7.Advice通知的实现 AopProxy代理对象生成时,其拦截器也一并生成.以下我们来分析下Aop是怎样对目标对象进行增强的.在为AopProxy配置拦截器的实现中,有一个取得拦截器配置过程,这个 ...