精华内容
下载资源
问答
  • java导出xls和xlsx的区别点
    2022-03-04 10:28:54

    前言:一开始用XSSFWorkbook实现读写xlsx后缀的excel文件,文件导出是完全没有问题的,后来需求变了,需要根据前台选择导出格式(xls或xlsx)来动态导出对应后缀的excel文件。
    过程:1、一开始通过格式入参试图根据改变文件名的后缀来达到这个目的,结果导出xls文件的时候,还是报了文件格式不符合的打开错误
    2、根据导出格式的入参,分别用XSSFWorkbook、HSSFWorkbook来写两次不同的导出逻辑,这种方法是可以的但是过于复杂。
    结果:后面统一用了Workbook实现导出方法。既支持xls也支持xlsx
    格式的excel;需要注意的是Workbook(子类:HSSFWorkbook – xls格式、XSSFWorkbook – xlsX格式)以及其方法RichTextString(HSSFRichTextString – xls格式、 XSSFRichTextString – xlsX格式)都是抽象接口,不能直接new,必须根据导出格式选择对应的子类创建对象
    代码部分示例:

    //exportMode:导出格式入参
    
    //Workbook 的创建
    Workbook wb = this.getWorkbook(exportMode);
    //单元格的创建
    Cell cell = row.createCell(1);
    cell.setCellValue(this.getRichTextString(exportMode, sheetName));
    cell.setCellStyle(headStyle);
    
    
     
     /**
         * 根据选择的导出格式生成对应的富文本
         */
        public RichTextString getRichTextString(String exportMode,String memo){
            //0:xls格式   1:xlsx格式
            if (Const.CNST_STR_FALSE.equals(exportMode)) {
                return new HSSFRichTextString(memo);
            } else {
                return new XSSFRichTextString(memo);
            }
        }
    
        /**
         * 根据选择的导出格式生成对应的Workbook
         */
        public Workbook getWorkbook(String exportMode){
            //0:xls格式   1:xlsx格式
            if ("0".equals(exportMode)) {
                return new HSSFWorkbook();
            } else {
                return new XSSFWorkbook();
            }
        }
    

    备注:xls和xlsx对象的区别

    xls格式: HSSFWorkbook HSSFDataFormat HSSFSheet HSSFRow HSSFCell HSSFCellStyle HSSFFont HSSFRichTextString
    xlsX格式:XSSFWorkbook XSSFDataFormat XSSFSheet XSSFRow XSSFCell XSSFCellStyle XSSFFont XSSFRichTextString
    通用格式:    Workbook     DataFormat     Sheet     Row     Cell     CellStyle     Font     RichTextString
    Workbook RichTextString  抽象接口,不能直接new,必须根据格式选择对应的子类创建对象		
    
    更多相关内容
  • 开源个人珍藏 mfc(c++)读写xls和xlsx文件的类
  • ExcelReader 读取.xls和.xlsx Excel文件。 可用于解析电子表格并获取单元格值。
  • java读取excel ,xls和xlsx

    千次下载 热门讨论 2013-11-13 20:46:29
    java读取excel文件,兼容xlsx格式,可以用于07版本10版本
  • java解析xls和xlsx

    2022-02-17 15:51:12
    public class ParseExcel { /** * 解析文件的方法 *@param inputStream文件输入流 ,要解析的Excel文件输入流 *@param suffix 后缀名,xlsxlsx,代码决定使用什么方式解析Excel *@param startRow 从第几行开始...

    工具类:

    package com.zhxd.guaranteeStation.util;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.Row;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    public class ParseExcel {
        /**
         * 解析文件的方法
         *@param inputStream文件输入流 ,要解析的Excel文件输入流
         *@param suffix 后缀名,xls或xlsx,代码决定使用什么方式解析Excel
         *@param startRow 从第几行开始读取数据
         *@return List<String[]> 集合中的一个元素对应一行解析的数据
         *        元素为字符串数组类型,数组中的每一个元素对应一列数据
         * @throws IOException
         */
    
        public List<String[]> parseExcel(InputStream inputStream,String suffix,int startRow) throws IOException{
            //定义Excel对象变量
            Workbook workbook=null;
            //判断后缀 决定使用的解析方式,决定如何创建具体的对象
            if("xls".equals(suffix)) {
                //2003版的解析方式
                workbook=new HSSFWorkbook(inputStream);
            }else if("xlsx".equals(suffix)) {
                //2007
                workbook=new XSSFWorkbook(inputStream);
            }else {
                //未知内容
                return null;
            }
            //获取工作表,Excel分为若干个表,sheet
            //得到第一个表格sheet
            Sheet sheet = workbook.getSheetAt(0);
            if(sheet==null) {
                return null;
            }
            //获取表格中最后一行的行号
            int lastRowNum = sheet.getLastRowNum();
            //最后一行的行号大于startRow
            if(lastRowNum<startRow) {
                return null;
            }
            List<String[]> result=new ArrayList<String[]>();
    
            //定义行变量和单元格变量
            Row row=null;
            Cell cell=null;
            //循环读取
            for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {
                row=sheet.getRow(rowNum);
                //获取当前行的第一列和最后一列的标记
                short firstCellNum = row.getFirstCellNum();
                short lastCellNum = row.getLastCellNum();
                if(lastCellNum!=0) {
                    String[] rowArray=new String[lastCellNum];
                    for(int cellNum=firstCellNum;cellNum<lastCellNum;cellNum++) {
                        //拿到单元格的值
                        cell=row.getCell(cellNum);
                        //判断单元格是否有数据
                        if(cell==null) {
                            rowArray[cellNum]=null;
                        }else {
                            rowArray[cellNum]=parseCell(cell);
                        }
                    }
                    result.add(rowArray);
                }
            }
    
    
    
            return result;
        }
        /**
         * 解析单元格数据(返回字符串)
         */
    
        private String parseCell(Cell cell) {
            String cellStr=null;
            //判断单元格的类型
            switch (cell.getCellType()) {
                case STRING :
                    //字符串类型单元格
                    cellStr=cell.getRichStringCellValue().toString();
                    break;
                case BLANK :
                    //空数据
                    cellStr="";
                    break;
                case NUMERIC :
                    //数字类型  包含日期、时间、数字
                    //判断日期【年月日2016-12-20  | 时分10:20】类型
                    if(HSSFDateUtil.isCellDateFormatted(cell)) {
                        //判断具体类型,是日期还是时间
                        SimpleDateFormat sdf=null;
                        if(cell.getCellStyle().getDataFormat()==HSSFDataFormat.getBuiltinFormat("h:mm")) {
                            //时间
                            sdf=new SimpleDateFormat("HH:mm");
                        }else {
                            //日期
                            sdf=new SimpleDateFormat("yyyy-MM-dd");
                        }
                        Date temp = cell.getDateCellValue();
                        cellStr=sdf.format(temp);
                    }else {
                        //数字
                        double temp=cell.getNumericCellValue();
                        //数字格式化工具
                        DecimalFormat format=new DecimalFormat();
                        //查看单元格中的具体样式类型
                        String formatStr=cell.getCellStyle().getDataFormatString();
                        if(formatStr.equals("General")) {
                            /**这个判断是四舍五入的,根据自己业务决定是否去掉
                             * 定义格式化正则
                             * 保留一位小数 #.#
                             * 保留两位小数#.##
                             */
                            format.applyPattern("#");
                        }
                        //保留小数点后三位
                        cellStr=format.format(temp);
                    }
                    break;
                default:
                    cellStr="";
    
            }
            return cellStr;
        }
    }
    

    controller:

    public Response uploadLineExcel(@RequestParam(value = "file") MultipartFile file, String taskId) throws Exception {
        List<BaozhangTaskGeneratrixLine> baozhangTaskGeneratrixLineList = new ArrayList<>();
        ParseExcel parser=new ParseExcel();
        InputStream inputStream = file.getInputStream();
        String suffix="xlsx";
        int startRow=1;
        List<String[]> result = parser.parseExcel(inputStream, suffix, startRow);

    循环数组自己写

    展开全文
  • 读取xls和xlsxjar包

    2020-10-04 21:34:59
    从java读取xls和xlsx所必须使用的jar包
  • 此程序用于MFC读写excle文件的操作类。可以操作xls和xlsx文件。 有网上的收集的资料,优化后可用在项目中的操作类。有兴趣的朋友可以在此基础上添加更多的读写功能。
  • 一个简单的基于Android读取xls和xlsx文件的例子,采用的POI。
  • 想在深度学习程序运行时动态存下来一些参数。 存成Excel文件查看方便,就查了几种方法,做个测试。因为我平常也不怎么用 Excel,简单的存取数据就够了。...#存第一行cell(1,1)cell(1,2) booksheet.write(0,0,34) book
  • 1.兼容xls,xlsx;基于NOPI操作,支持xls和xlsx; 2.包含Datable转list; 3.list转Datable;
  • HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls; 此种方式的局限就是导出的行数至多为65535行,超出65536条后系统就会报错。 第二种:XSSFWorkbook XSSFWorkbook:是操作Excel2007后的版本,...
    第一种:HSSFWorkbook
    HSSFWorkbook:是操作Excel2003以前(包括2003)的版本,扩展名是.xls;
    此种方式的局限就是导出的行数至多为65535行,超出65536条后系统就会报错。
    第二种:XSSFWorkbook
    XSSFWorkbook:是操作Excel2007后的版本,扩展名是.xlsx;
    为了突破HSSFWorkbook的65535行局限。其对应的是excel2007(1048576行,16384列)扩展名为“.xlsx”,
    最多可以导出104万行。
    
    //importFile 为excel文件路径
    Workbook book = null;
    try {
        book = new XSSFWorkbook(importFile);
    } catch (Exception ex) {
        book = new HSSFWorkbook(new FileInputStream(importFile));
    }
    
    //初始化,拼接脚本表头
    StringBuilder jkFields = new StringBuilder();
    //根据excel,拼接数据
    StringBuilder sbData = new StringBuilder();
    sbData.append(jkFields);
    int j = 0;
    //0:获取第一个Sheet的内容
    Sheet sheet = book.getSheetAt(0);
    //获取excel最大行数
    int lastRowNum = sheet.getLastRowNum();
    //获取excel最大列数
    int lastColNum = sheet.getRow(0).getLastCellNum();
    //循环行
    for (int rowNum = 1; rowNum < lastRowNum; rowNum ++) {
        row = sheet.getRow(rowNum);
        cell = row.getCell(0);
        //姓名或身份证号为空,跳出进行下一次循环
        if(cell.getCellTypeEnum() == CellType.BLANK){
            continue;
        }
        j++;
        //循环列
        for (int colNum = 0; colNum < lastColNum; colNum ++) {
            if(sheet.isColumnHidden(colNum)){ //隐藏列
                continue;
            }
            cell = row.getCell(colNum);
            if (cell == null) { //数据为空的列 
                continue;
            }
            else {
                //数字类型
                if(cell.getCellTypeEnum() == CellType.NUMERIC) {
                    BigDecimal val = new BigDecimal(cell.getNumericCellValue());
                    sbData.append(",'").append(val).append("'");
                }
                //字符类型
                else if(cell.getCellTypeEnum() == CellType.STRING) {
                    sbData.append(",'").append(cell.getStringCellValue()).append("'");
                }
                //内容为空
                else if(cell.getCellTypeEnum() == CellType.BLANK) {
                    sbData.append(",'").append(cell.getStringCellValue()).append("'");
                }
            }
        }
        //每1000条执行一次
        if (0 == j % 1000) { 
            //执行脚本,初始化脚本        
            sbData = new StringBuilder();
        }
    }
    
    展开全文
  • 最近遇到一个问题,xls文件只能用兼容模式打开,如果不想要用兼容模式,就要换成xlsx。 但是换成xlsx之后发现另外一个问题,原来读取xls用到的 xlrd.open_workbook() 读取xlsx会出现问题。读取写入之后显示: ...

    最近遇到一个问题,xls文件只能用兼容模式打开,如果不想要用兼容模式,就要换成xlsx。

    但是换成xlsx之后发现另外一个问题,原来读取xls用到的

    xlrd.open_workbook() 读取xlsx会出现问题。读取写入之后显示:

    醉了。

    然后找到了这个博客。

    最后的解决方案: 使用openpyxl。

    原代码1:

        #GUI module
        def recording2(row, col, value):
            workbook = xlrd.open_workbook(r"G:\expert system data\Machine Database.xlsx")
            #ws = workbook.sheet_by_index(0)
            workbook1 = copy(workbook)
            ws1 = workbook1.get_sheet(0)
            ws1.write(row, col, value)
            workbook1.save(r"G:\expert system data\Machine Database.xlsx")

    改成:

        def recording2(row, col, value):
            workbook = openpyxl.load_workbook(r"G:\expert system data\Machine Database.xlsx")
            worksheet = workbook.worksheets[0]
            worksheet.cell(row=row, column=col).value = value
            workbook.save(r"G:\expert system data\Machine Database.xlsx")

    原代码2:

    #smart_RFS module
    
    workbook = xlrd.open_workbook(r"G:\expert system data\Machine Database.xlsx")
    workbook1 = copy(workbook)
    ws1 = workbook1.get_sheet(0)
    style = xlwt.XFStyle()
    style.num_format_str = 'yyyy-mm-dd hh:mm:ss'
    ws1.write(row, 8, current_time, style)
    workbook1.save(r"G:\expert system data\Machine Database.xlsx")

    改成:

    workbook = openpyxl.load_workbook(r"G:\expert system data\Machine Database.xlsx")
    worksheet = workbook.worksheets[0]
    worksheet.cell(row=row, column=8).value = current_time
    workbook.save(r"G:\expert system data\Machine Database.xlsx")

    原代码3:

    #functions modula
    
    def recording(tester, product, name, time, detail, sol):
        print("row")
        workbook = xlrd.open_workbook(r"G:\expert system data\Machine Database.xlsx")
        ws = workbook.sheet_by_index(0)
        rowNum = ws.nrows
        workbook1 = copy(workbook)
        style = xlwt.XFStyle()
        style.num_format_str = 'yyyy-mm-dd hh:mm:ss'
        ws1 = workbook1.get_sheet(0)
        ws1.write(rowNum, 0, tester)
        ws1.write(rowNum, 1, product)
        ws1.write(rowNum, 2, name)
        ws1.write(rowNum, 3, time, style)
        print("time", time)
        ws1.write(rowNum, 4, detail)
        ws1.write(rowNum, 5, sol)
        workbook1.save(r"G:\expert system data\Machine Database.xlsx")
        return rowNum

    改成:

    def recording(tester, product, name, time, detail, sol):
        print("row")
        
        workbook = openpyxl.load_workbook(r"G:\expert system data\Machine Database.xlsx")
        worksheet = workbook.worksheets[0]
        rowNum = worksheet.max_row
        worksheet.cell(row = rowNum, column=0).value = tester
        worksheet.cell(row = rowNum, column=1).value = product
        worksheet.cell(row = rowNum, column=2).value = name
        worksheet.cell(row = rowNum, column=3).value = time
        print("time", time)
        worksheet.cell(row = rowNum, column=4).value = detail
        worksheet.cell(row = rowNum, column=5).value = sol
        worksheet.cell(row=2, column=2).value = 2
        workbook.save(r"G:\expert system data\Machine Database.xlsx")
        return rowNum

    遇到了其他小问题:

    和xlrd的write不同, openpyxl的行和列是从1 开始,所以相比于xlrd,要全部加上1。

    展开全文
  • 只能讲文本转换,无法转换格式 帮助链接: ... #coding:utf-8 # 引入模块 import xlrd #判断Excel表是否存在 try: flile_name = "日盘单.xls" xls = xlrd.open_workbook(fl
  • 这是用于将excel XLS和XLSX文件转换为HTML或PDF格式的库 基于: jxls-用于将XLSXLSX转换为HTML itext-用于将HTML转换为PDF 用法: 用于HTML(Xls2HtmlConverter) new Xls2HtmlConverter ( new ...
  • 使用poi将xls格式的Excel转为xlsx,文件中的所有样式都可以完美转换,例如合并栏、背景单元格样式等。Java源码
  • java读取xls和xlsx文件

    千次阅读 2019-09-23 14:14:44
    "读取Xlsx文件异常" ) ; e . printStackTrace ( ) ; } finally { is . close ( ) ; } return count ; } /** * * <p>Title: readExecl</p> * <p>Description:读取Execl</p> ...
  • 批量xlsxlsx软件

    2019-01-21 15:31:18
    Convert XLSX to XLS:CXS45YKL467EVB Convert XLS to XLSX:CXX34JHY87ZX4T
  • 支持单元格格式,合并单元格转换,不依赖安装excel,使用开源NPOI 2.5.1版本,VS2019调试通过
  • xls和 xlsx的区别 xlsx Excel文件怎么转换成 xls文件
  • xls和xlsx的区别

    万次阅读 2019-04-04 16:53:20
    office 97-2003版本:xls doc office 2007版本:xlsx docx xls,是一个特有的二进制格式,其核心结构是复合文档,最多容纳65536行数据 xlsx,核心结构是xml类型,采用基于xml的压缩方式,使其占用空间更小,最后...
  • i 此为输出xlsx格式。 如果需要xls格式。将所有XSSF改为HSSF,并修改response.setContentType为被注释掉的代码,以及前端按钮方法的type为type: "application/vnd.ms-excel" //前端 //导出按钮方法 onExport() { ...
  • //此连接可以操作.xls与.xlsx文件 OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); DataSet ds = new DataSet(); OleDbDataAdapter odda = new OleDbDataAdapter(string.Format(“SELECT * FROM...
  • Sheet Viewer是一个非常简单的XLS和XLSX查看器。
  • POI解析xls和xlsx表格

    千次阅读 2018-10-18 10:39:22
    日常工作中,解析xls数据到数据库,或者从数据库导出数据到xls,本问介绍如何直接使用pol来完成次需求, 需要导入apache pol工具包,下载地址 代码如下: package com.xlsx; import java.io.FileInputStream; ...
  • poi转换xlsxlsx

    2020-12-28 16:07:42
    poi转换xlsxlsx
  • docx 是Office2007使用的,是用新的基于XML的压缩文件格式取代了其目前专有的默认文件格式,在传统的文件名扩展名后面添加了字母x(即.docx取代.doc、.xlsx取代.xls,等等) .docx文件比.doc文件所占用空间更小 微软...
  • poi读取xlsx和xls

    2019-04-04 01:01:46
    NULL 博文链接:https://fireflylover.iteye.com/blog/1484218
  • 【JAVA_POI】解析Excel文档(xls和xlsx

    千次阅读 2020-08-17 13:53:07
    excel文档有.xls和.xlsx两种后缀,那么这两种后缀有什么区别呢? 1.1 文件核心结构不同 xls 是一个特有的二进制格式,其核心结构是复合文档类型的结构。 xlsx 的核心结构是 XML 类型的结构,并且基于XML进行...
  • poi导入excel,支持xls和xlsx格式

    千次阅读 2018-10-15 20:26:42
    //根据文件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象 if(fileName.endsWith(xls)){ //2003 workbook = new HSSFWorkbook(is); }else if(fileName.endsWith(xlsx)){ //2007 workbook = new ...
  • Excel的xls和xlsx文件转csv,依赖最新的python3.5.2(www.python.org)以及python的一个库xlrd(https://pypi.python.org/pypi/xlrd) 记得安装python的时候把所有的安装全勾上,才能安装

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,351
精华内容 23,340
关键字:

xls和xlsx

友情链接: east_octopus.zip