皮皮网

【大资金流源码】【spring源码 单例】【苏宁源码 ios】2003源码

2024-12-24 10:56:41 来源:乐金惠 源码

1.Linux Centos7.8.2003系统离线GCC源码编译升级
2.如何用Apache POI读取Excel

2003源码

Linux Centos7.8.2003系统离线GCC源码编译升级

       要进行Linux Centos7.8.的源码GCC离线源码编译升级,首先需要准备一个干净的源码Centos7.8.虚拟机,并可以使用本地镜像源,源码具体步骤可在相关文章中找到。源码大资金流源码

       在GCC的源码ftp站点下载所需版本,例如gcc-.1.0。源码新安装的源码机器可能缺少编译依赖,但镜像源内通常包含这些,源码无需在线下载。源码

       编译依赖库一般包括gcc-c++、源码autoconf、源码spring源码 单例automake、源码libtools和m4,源码但具体可能因机器环境而异。源码简便的源码方法是使用yum group install Development Tools,这个组合包含了大部分开发所需的苏宁源码 ios依赖。

       离线编译时,先解压gcc源码,然后进入目录,由于是离线,需要手动下载所有依赖,dnf读写驱动源码如gmp-6.1.0、isl、mpfr和mpc。确保按依赖顺序编译,例如先gmp-6.1.0,mysql 源码 pdf下载然后mpc-1.0.3。

       创建编译目录,设置编译参数后,开始编译过程。可能遇到找不到库的错误,此时需要将库添加到环境变量。编译时间根据机器性能不同,通常十几分钟内完成。

       编译成功后,升级GCC的过程是删除或备份原有GCC软链接,然后指向新编译的GCC目录。升级脚本可以简化这一过程,但如有问题,务必及时调整。

如何用Apache POI读取Excel

       ã€€ã€€é¦–å…ˆPOI是开源组织Apache出品的一个开源jar包,提供了方便解析Excel的API,我们可以非常方便的使用它来读取Excel。这里介绍3.5Final版本。

       ã€€ã€€æ‰€éœ€ç”¨åˆ°çš„jar包如下:

       ã€€ã€€è¯´åˆ°Excel,有和,格式是不一样的,用POI解析的方法也就不一样,Excel主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel就是使用org.apache.poi.xssf.usermodel来解析。

       ã€€ã€€è§£æžExcel源码

       è¯´åˆ°Excel,有和,格式是不一样的,用POI解析的方法也就不一样,Excel主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel就是使用org.apache.poi.xssf.usermodel来解析。

       è§£æžExcel源码

       StringBuffer content = new StringBuffer();

         HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel工作簿文件的引用

         for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {

          if (null != workbook.getSheetAt(numSheets)) {

           HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 获得一个sheet

           for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {

            if (null != aSheet.getRow(rowNumOfSheet)) {

             HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一行

             for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {

              if (null != aRow.getCell(cellNumOfRow)) {

               HSSFCell aCell = aRow.getCell(cellNumOfRow); // 获得列值

               

               if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {

                content.append(aCell.getNumericCellValue() + "\t");

               } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {

                content.append(aCell.getBooleanCellValue() + "\t");

               } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {

                content.append(aCell.getStringCellValue() + "\t");

               } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){

                content.append(aCell.getCellFormula() + "\t");

               } else {

                continue;

               }

              }

              if(cellNumOfRow == aRow.getLastCellNum()) {

               content.append("\n");

              }

             }

            }

           }

          }

         }

         return content.toString().trim();

        

       è§£æžExcel和基本一样,只是将HSSFSheet,HSSFCell等都改成XSSFSheet,XSSFCell即可。

       å¦å¤–要提醒大家的是Excel的样式都是基于一个单元格的,所以用HSSFRow.getRowStyle()拿样式会出问题的,不一定会拿到你想要的样式。处理合并单元格是POI的一个难点,只能通过判断当前单元格是否在合并单元格之中,如果是,那此单元格的值便是这个合并单元格的首位置单元格的值,只有通过这样才能来处理合并单元格。

       å¤„理合并单元格的代码:

        public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {

         //得到一个sheet中有多少个合并单元格

         int sheetmergerCount = sheet.getNumMergedRegions();

         for(int i = 0; i < sheetmergerCount; i++) {

          //得出具体的合并单元格

          CellRangeAddress ca = sheet.getMergedRegion(i);

          //得到合并单元格的起始行, 结束行, 起始列, 结束列

          int firstC = ca.getFirstColumn();

          int lastC = ca.getLastColumn();

          int firstR = ca.getFirstRow();

          int lastR = ca.getLastRow();

          //判断该单元格是否在合并单元格范围之内, 如果是, 则返回 true

          if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {

           if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {

            return true;

           }

          }

         }

         return false;

        }

        

        public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {

         //获得一个 sheet 中合并单元格的数量

         int sheetmergerCount = sheet.getNumMergedRegions();

         //便利合并单元格

         for(int i = 0; i < sheetmergerCount; i++) {

          //获得合并单元格

          CellRangeAddress ca = sheet.getMergedRegion(i);

          //获得合并单元格的起始行, 结束行, 起始列, 结束列

          int firstC = ca.getFirstColumn();

          int lastC = ca.getLastColumn();

          int firstR = ca.getFirstRow();

          int lastR = ca.getLastRow();

          //判断该单元格是否是在合并单元格中, 如果是, 则返回所在合并单元格的首单元格的值

          if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {

           if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {

            HSSFRow fRow = sheet.getRow(firstR);

            HSSFCell fCell = fRow.getCell(firstC);

            //除了合并单元格首单元格的值, 其余的用(*)来区分

            if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {

             return String.valueOf(fCell.getNumericCellValue());

            } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {

             return String.valueOf(fCell.getBooleanCellValue());

            } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {

             return fCell.getStringCellValue();

            } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){

             return String.valueOf(fCell.getCellFormula());

            }

           }

          }

         }

         return "";

        }