1.javapoi读取写入excel(包括样式)的工具类utils(代码片段)

RQ_ghylls RQ_ghylls     2023-01-17     329

关键词:

在工作中经常会遇到操作excel的需求,对于格式简单、统一的excel可以选择EasyExcel来实现功能,很简单方便;而对于复杂的excel文件,如有各式各样的合并单元格、表头不固定、行列跟随业务数据动态变化……格式变幻多端的文件,easyExcel就显得无能为力了,选择poi就可以解决此问题了。

这里贴上在工作中解决问题时,自己封装的工具类,方便大家查阅:

目录

一、读取Excel、写入Excel文件工具类

二、导出Excel文件的样式设置工具类

三、写入Excel简单示例 


一、读取、写入Excel工具类

注:poi版本为org.apache.poi:4.1.0

/**
 * 工具类-使用poi读取Excel
 */
@Slf4j
public class ExcelUtilByPOI 
    private static final String EXCEL_XLS = "xls";
    private static final String EXCEL_XLSX = "xlsx";

    /**
     * 读取excel文件中的全部表格
     * 描述:适用于没有单元格合并的excel,并且 (titleOfRow,titleOfColumn)位置为读取内容的起始位置的情况
     * 每一行构成一个map,key值是列标题,value是列值。没有值的单元格其value值为null
     * 返回结果最外层list对应excel文件,第二层Iterable对应sheet页,第三层map对应sheet页中一行
     *
     * @param filePath 文件路径
     * @param sheetCnt 读取的文件中前sheetCnt个sheet数据。如果值为-1,则读取所有的sheet,否则,读取前sheetCnt个sheet的数据。
     * @return
     * @throws Exception
     */
public static List<List<Map<String, Object>>> readExcelWithFiexPos(String filePath, int titleInRow, int titleInColumn, int sheetCnt) throws IOException 
        Workbook wb = null;
        try 
            List<List<Map<String, Object>>> excelData = new ArrayList<>();
            if (filePath.endsWith(EXCEL_XLS) || filePath.endsWith(EXCEL_XLSX)) 
                File file = new File(filePath);
                wb = getWorkbook(file);
                int sheetSize = sheetCnt == -1 ? wb.getNumberOfSheets() : sheetCnt;
                //遍历sheet
                for (int i = 0; i < sheetSize; i++) 
                    Sheet sheet = wb.getSheetAt(i);
                    List<Map<String, Object>> theSheetData = readSheet(sheet, titleInRow, titleInColumn);
                    excelData.add(theSheetData);
                
             else 
                log.error("读取的不是Excel文件");
            
            return excelData;
         catch (FileNotFoundException e) 
            throw e;
         finally 
            if (wb != null) 
                wb.close();
            
        
    

    /**
     * 读取excel文件中的全部表格
     * 描述:适用于没有单元格合并的excel,并且 以fiexedValue在sheet中的位置为读取内容起始位置的情况
     * 每一行构成一个map,key值是列标题,value是列值。没有值的单元格其value值为null
     * 返回结果最外层list对应excel文件,第二层Iterable对应sheet页,第三层map对应sheet页中一行
     *
     * @param fixedValue 固定值(第一个列标题)
     * @param filePath   文件路径
     * @param sheetCnt   读取的文件中前sheetCnt个sheet数据。如果值为-1,则读取所有的sheet,否则,读取前sheetCnt个sheet的数据。
     * @return
     * @throws Exception
     */
    public static List<List<Map<String, Object>>> readExcelWithFiexedTitle(String filePath, String fixedValue, int sheetCnt) throws IOException 
        Workbook wb = null;
        try 
            List<List<Map<String, Object>>> excelData = new ArrayList<>();
            if (filePath.endsWith(EXCEL_XLS) || filePath.endsWith(EXCEL_XLSX)) 
                File file = new File(filePath);
                wb = getWorkbook(file);
                int sheetSize = sheetCnt == -1 ? wb.getNumberOfSheets() : sheetCnt;
                //遍历sheet
                for (int i = 0; i < sheetSize; i++) 
                    Sheet sheet = wb.getSheetAt(i);
                    List<Integer> posForSheet = readPosForValue(sheet, fixedValue);
                    List<Map<String, Object>> theSheetData = readSheet(sheet, posForSheet.get(0), posForSheet.get(1));
                    excelData.add(theSheetData);
                
             else 
                log.error("读取的不是Excel文件");
            
            return excelData;
         catch (FileNotFoundException e) 
            throw e;
         finally 
            if (wb != null) 
                wb.close();
            
        
    

    /**
     * 读取excel文件个sheet第rowNum行的内容,从firstColNum列开始往后读取到第lastColNum列
     *
     * @param filePath
     * @param rowNum
     * @param firstColNum
     * @param lastColNum
     * @return
     */
    public static List<List<Object>> readRowData(String filePath, int rowNum, int firstColNum, int lastColNum) throws IOException 
        List<List<Object>> dataList = new ArrayList<>();

        File file = new File(filePath);
        Workbook wb = getWorkbook(file);
        int sheetCnt = wb.getNumberOfSheets();

        for (int cnt = 0; cnt < sheetCnt; cnt++)  //遍历每一个sheet
            Sheet sheet = wb.getSheetAt(cnt);
            Row row = sheet.getRow(rowNum);
            lastColNum = lastColNum == -1 ? row.getLastCellNum() : lastColNum; //如果没有lastColNum则为其值为最后一列

            List<Object> sheetContentList = new ArrayList<>();
            Cell cell = null;
            String value = null;
            for (int i = firstColNum; i < lastColNum; i++)  //读取指定行的内容
                cell = row.getCell(i);
                value = readCellByType(cell);
                sheetContentList.add(value);
            
            dataList.add(sheetContentList);

        

        return dataList;
    

    /**
     * 读取给定sheet的内容
     * 描述:
     * 读取excel文件中的指定名称的表格 用于没有单元格合并的表格,且 (titleOfRow,titleOfColumn)位置为读取内容的起始位置的情况
     * 每一行构成一个map(key值是列标题,value是列值)。没有值的单元格其value值为null。
     * 返回结果最外层的list对应一个sheet页,第二层的map对应sheet页中的一行。
     *
     * @param sheet
     * @return
     */
    private static List<Map<String, Object>> readSheet(Sheet sheet, int titleInRow, int titleInColumn) 
        List<Map<String, Object>> sheetList = null;
        sheetList = new ArrayList<Map<String, Object>>();
        List<String> titles = new ArrayList<>();
        int rowSize = sheet.getLastRowNum() + 1;
        for (int i = titleInRow; i < rowSize; i++) 
            Row row = sheet.getRow(i);
            if (row == null)
                continue;
            ;//略过空行
            int cellSize = row.getLastCellNum();
            if (i == titleInRow) //标题行
            
                for (int j = titleInColumn; j < cellSize; j++) 
                    Cell cell = row.getCell(j);
                    if (cell != null) 
                        titles.add(cell.toString());
                    
                
             else  //对应每一行的数据
                Map<String, Object> rowDataMap = new LinkedHashMap<>();
                for (int j = titleInColumn; j < titleInColumn + titles.size(); j++) 
                    Cell cell = row.getCell(j);
                    String value = null;
                    CellType cellType = null;
                    if (cell == null) 
                        continue;
                    
                    cellType = cell.getCellTypeEnum();
                    switch (cellType) 
                        case STRING:
//                                 value = cell.getRichStringCellValue().getString();
                            value = cell.getStringCellValue();
                            break;
                        case NUMERIC: //包含日期和普通数字
                            if (DateUtil.isCellDateFormatted(cell)) 
                                Date date = cell.getDateCellValue();
                                DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                                value = df.format(date);
                             else 
                                double cellValue = cell.getNumericCellValue();
                                value = String.valueOf(cellValue);
                                // 下面的代码,会自动舍弃读取单元格中显示的值(可能是做了round()之后的结果),不是单元格中最原本的值
                                /*NumberFormat nf = NumberFormat.getInstance();
                                String tmpValue = nf.format(cell.getNumericCellValue());
                                if (tmpValue.indexOf(",") >= 0) 
                                    tmpValue = tmpValue.replaceAll(",", "");
                                
                                value = tmpValue;*/

                            
                            break;
                        case FORMULA:
//                                 cell.getCellFormula();
                            cell.setCellType(CellType.STRING);
                            value = cell.getStringCellValue();
                            break;
                        case BOOLEAN:
                            value = String.valueOf(cell.getBooleanCellValue());
                            break;
                        default:
                            if (cell != null) 
                                value = cell.toString();
                            
                    
                    String key = titles.get(j - titleInColumn);
                    rowDataMap.put(key, value);
                
                sheetList.add(rowDataMap);
            
        
        return sheetList;
    

    /**
     * 读取sheet中指定值的位置
     *
     * @param sheet
     * @return
     */
    private static List<Integer> readPosForValue(Sheet sheet, String fixedValue) 
        List<Integer> posList = new ArrayList();
        Object value = null;
        for (int j = 0; j < sheet.getPhysicalNumberOfRows(); j++)  // 获取每行
            XSSFRow row = (XSSFRow) sheet.getRow(j);
            if (row != null) 
                for (int k = 0; k < sheet.getRow(0).getPhysicalNumberOfCells(); k++)  // 获取每个单元格
                    Cell cell = row.getCell(k);
                    if (cell == null) 
                        continue;
                    
                    CellType cellTypeEnum = cell.getCellTypeEnum();
                    switch (cellTypeEnum) 
                        case STRING:
                            value = cell.getRichStringCellValue().getString();
                            break;
//                        case Cell.CELL_TYPE_NUMERIC:
                        case NUMERIC:
                            if (DateUtil.isCellDateFormatted(cell)) 
                                value = cell.getDateCellValue();
                             else 
                                double cellValue = cell.getNumericCellValue();
                                value = String.valueOf(cellValue);
                               /* // 下面的代码,会自动舍弃读取单元格中显示的值(可能是做了round()之后的结果),不是单元格中最原本的值
                                NumberFormat nf = NumberFormat.getInstance();
                                String tmpValue = nf.format(cell.getNumericCellValue());
                                if (tmpValue.indexOf(",") >= 0) 
                                    tmpValue = tmpValue.replaceAll(",", "");
                                
                                value = tmpValue;*/
                            
                            break;
                        case BOOLEAN:
                            value = cell.getBooleanCellValue();
                            break;
                        case FORMULA:
                            value = cell.getCellFormula();
                            break;
                        default:
                            value = "";
                            break;
                    
                    if (fixedValue.equals(value.toString())) 
                        posList.add(cell.getRowIndex());
                        posList.add(cell.getColumnIndex());
                        break;
                    
                
            
            if (!BeanUtil.isEmpty(posList)) 
                break;
            
        
        return posList;
    

    /**
     * 根据excel的版本,获取相应的Workbook
     *
     * @param file
     * @return
     */
    public static Workbook getWorkbook(File file) throws IOException 
        Workbook wb = null;
        InputStream fis = new FileInputStream(file);
        if (file.getName().endsWith(EXCEL_XLS)) //2003
        
            wb = new HSSFWorkbook(fis);
         else if (file.getName().endsWith(EXCEL_XLSX)) 
            wb = new XSSFWorkbook(fis);//2007 2010
        
        if (fis != null) 
            fis.close();
        
        return wb;
    

    /**
     * 判断指定的单元格是否是合并单元格
     *
     * @param sheet
     * @param row    行下标
     * @param column 列下标
     * @return
     */
    public static boolean isMergedRegion(Sheet sheet, int row, int column) 
        int sheetMergeCount = sheet.getNumMergedRegions();
        for (int i = 0; i < sheetMergeCount; i++) 
            CellRangeAddress range = sheet.getMergedRegion(i);
            int firstColumn = range.getFirstColumn();
            int lastColumn = range.getLastColumn();
            int firstRow = range.getFirstRow();
            int lastRow = range.getLastRow();
            if (row >= firstRow && row <= lastRow) 
                if (column >= firstColumn && column <= lastColumn) 
                    return true;
                
            
        
        return false;
    
 /**
     * 获取合并单元格的值
     *
     * @param sheet
     * @param row
     * @param column
     * @return
     */
    public static String getMergedCellValue(Sheet sheet, int row, int column) 
        String value = null;
        int mergedCellCnt = sheet.getNumMergedRegions();
        for (int i = 0; i < mergedCellCnt; i++) 
            CellRangeAddress mergedCell = sheet.getMergedRegion(i);
            int firstColumn_pos = mergedCell.getFirstColumn();
            int lastColumn_pos = mergedCell.getLastColumn();
            int firstRow_pos = mergedCell.getFirstRow();
            int lastRow_pos = mergedCell.getLastRow();
            if (row >= firstRow_pos && row <= lastRow_pos) 
                if (column >= firstColumn_pos && column <= lastColumn_pos) 
                    Row firstRow = sheet.getRow(firstRow_pos);
                    Cell cell = firstRow.getCell(firstColumn_pos);
                    if (cell == null) 
                        continue;
                    
                    CellType cellType = cell.getCellTypeEnum();
                    switch (cellType) 
                        case STRING:
//                                 value = cell.getRichStringCellValue().getString();
                            value = cell.getStringCellValue();
                            break;
                        case NUMERIC: //包含日期和普通数字
                            if (DateUtil.isCellDateFormatted(cell)) 
                                Date date = cell.getDateCellValue();
                                DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                                value = df.format(date);
                             else 
                                double cellValue = cell.getNumericCellValue();
                                value = String.valueOf(cellValue);

                         /*       下面的代码,会自动舍弃读取单元格中显示的值(可能是做了round()之后的结果),不是单元格中最原本的值
                                NumberFormat nf = NumberFormat.getInstance();
                                String tmpValue = nf.format(cell.getNumericCellValue());
                                if (tmpValue.indexOf(",") >= 0) 
                                    tmpValue = tmpValue.replaceAll(",", "");
                                
                                value = tmpValue;*/
                            
                            break;
                        case FORMULA:
//                                 cell.getCellFormula();
                            cell.setCellType(CellType.STRING);
                            value = cell.getStringCellValue();
                            break;
                        case BOOLEAN:
                            value = String.valueOf(cell.getBooleanCellValue());
                            break;
                        default:
                            if (cell != null) 
                                value = cell.toString();
                            
                    
                    return cell == null || value == null ? "" : value;
                
            

        

        return null;
    

    /**
     * 读取单元格的类型
     *
     * @param cell
     * @return
     */
    public static String readCellByType(Cell cell) 
        if (cell == null) 
            return null;
        
        CellType cellType = cell.getCellTypeEnum();
        String value = null;
        switch (cellType) 
            case STRING:
//                                 value = cell.getRichStringCellValue().getString();
                value = cell.getStringCellValue();
                break;
            case NUMERIC: //包含日期和普通数字
                if (DateUtil.isCellDateFormatted(cell)) 
                    Date date = cell.getDateCellValue();
                    DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
                    value = df.format(date);
                 else 
                    double cellValue = cell.getNumericCellValue();
                    value = String.valueOf(cellValue);

                 /* 下面的代码,会自动舍弃读取单元格中显示的值(可能是做了round()之后的结果),不是单元格中最原本的值
                    NumberFormat nf = NumberFormat.getInstance();
                    String tmpValue = nf.format(cell.getNumericCellValue());
                    if (tmpValue.indexOf(",") >= 0) 
                        tmpValue = tmpValue.replaceAll(",", "");
                    
                    value = tmpValue;*/
                
                break;
            case FORMULA:
//                                 cell.getCellFormula();
                cell.setCellType(CellType.STRING);
                value = cell.getStringCellValue();
                break;
            case BOOLEAN:
                value = String.valueOf(cell.getBooleanCellValue());
                break;
            default:
                if (cell != null) 
                    value = cell.toString();
                
        
        return cell == null || value == null ? "" : value;
    

    /**
     * 读取一个excel文件中所有的sheet名字列表
     *
     * @param filePath 文件路径
     * @return
     * @throws Exception
     */
    public static List<String> readSheetNames(String filePath) throws Exception 
        Workbook wb = null;
        List<String> sheetNames = new ArrayList<String>();
        try 
            if (filePath.endsWith(EXCEL_XLS) || filePath.endsWith(EXCEL_XLSX)) 
                // 读取Excel文档
                File file = new File(filePath);
                wb = getWorkbook(file);
                int sheetSize = wb.getNumberOfSheets();
                // 遍历sheet页
                for (int i = 0; i < sheetSize; i++) 
                    Sheet sheet = wb.getSheetAt(i);
                    sheetNames.add(sheet.getSheetName());
                
             else 
                throw new BaseException(EPowerResultCode.JUDGE_EXCEL_FILE);
            
            return sheetNames;

         catch (FileNotFoundException e) 
            log.error(e.getMessage());
            throw e;
         finally 
            if (wb != null) 
                wb.close();
            
        
    

    /**
     * 读取excel中所有sheet的标题
     *
     * @return
     */
    public static List<String> readSheetTitles(String filePath) throws Exception 
        Workbook wb = null;
        List<String> titleList = new ArrayList<String>();
        try 
            if (filePath.endsWith(EXCEL_XLS) || filePath.endsWith(EXCEL_XLSX)) 
                // 读取Excel文档
                File file = new File(filePath);
                wb = getWorkbook(file);
                int sheetSize = wb.getNumberOfSheets();
                for (int i = 0; i < sheetSize; i++) 
                    Sheet sheet = wb.getSheetAt(i);
                    Row row = sheet.getRow(0);//默认第一行为表头
                    short lastCellNum = row.getLastCellNum();//共有多少列
                    for (int j = 0; j < lastCellNum; j++) 
                        Cell cell = row.getCell(j);
                        titleList.add(cell.getStringCellValue().trim());
                    
                
            
            return titleList;

         catch (Exception e) 
            log.error(e.getMessage());
            throw e;
         finally 
            if (wb != null) 
                wb.close();
            
        
    

    /**
     * 导出文件
     * @param request
     * @param response
     * @param wb
     * @param fileName
     */
    public static void exportFile(HttpServletRequest request, HttpServletResponse response, Workbook wb, String fileName)  throws Exception
        String userAgent = request.getHeader("USER-AGENT");
        if (userAgent.contains("MSIE")) // IE浏览器
            fileName = URLEncoder.encode(fileName, "UTF8");
         else if (userAgent.contains("Mozilla")) // google,火狐浏览器
            fileName = new String(fileName.getBytes(), "ISO8859-1");
         else 
            fileName = URLEncoder.encode(fileName, "UTF8");// 其他浏览器
        
        response.setContentType("application/octet-stream;charset=UTF-8");
        response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
        OutputStream outputStream = response.getOutputStream();
        wb.write(outputStream);
    

    

二、Excel样式设置工具类

/**
 * 导出的Excel单元格样式设置
 */
public class ExcelStyleUtil 
    /**
     * 表头字体
     *
     * @return
     */
    public static Font headerFoot(Workbook wb) 
        Font headerFont = wb.createFont();
        headerFont.setFontName("微软雅黑");
        headerFont.setFontHeightInPoints((short) 13);
        headerFont.setBold(true);
//        headerFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        headerFont.setColor(IndexedColors.BLACK.getIndex());
        return headerFont;
    

    /**
     * 正文字体
     *
     * @param wb
     * @return
     */
    public static Font contextFont(Workbook wb) 
        Font contextFont = wb.createFont();
        contextFont.setFontName("微软雅黑");
        contextFont.setFontHeightInPoints((short) 13);
        contextFont.setBold(false);
        contextFont.setColor(IndexedColors.BLACK.getIndex());
//        contextFont.setColor(HSSFColor.HSSFColorPredefined.BLACK.getIndex());
        return contextFont;
    


    /**
     * 表头样式-左右上下居中
     *
     * @param wb
     * @return
     */
    public static CellStyle headerStyle(Workbook wb) 
        CellStyle headerStyle = wb.createCellStyle();
        Font font = headerFoot(wb);
        headerStyle.setFont(font);
        headerStyle.setAlignment(HorizontalAlignment.CENTER);//水平居中
        headerStyle.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        headerStyle.setLocked(true);//锁定
        headerStyle.setWrapText(false);// 自动换行
        headerStyle.setBorderBottom(BorderStyle.THIN);//下边框
        headerStyle.setBorderTop(BorderStyle.THIN);//上边框
        headerStyle.setBorderLeft(BorderStyle.THIN);//左
        headerStyle.setBorderRight(BorderStyle.THIN);//右
        return headerStyle;
    


    /**
     * 单元格样式 - 水平、垂直居中
     *
     * @param wb
     * @return
     */
    public static CellStyle contextAlignCenterStyle(Workbook wb) 

        CellStyle style = wb.createCellStyle();
        Font font = contextFont(wb);
        style.setFont(font);
        style.setAlignment(HorizontalAlignment.CENTER);//水平居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        style.setLocked(true);
        style.setWrapText(true);// 自动换行
        style.setBorderBottom(BorderStyle.THIN);//下边框
        style.setBorderTop(BorderStyle.THIN);//上边框
        style.setBorderLeft(BorderStyle.THIN);//左
        style.setBorderRight(BorderStyle.THIN);//右
        return style;
    

    /**
     * 单元格样式-无左边框
     * @param wb
     * @return
     */
    public static CellStyle contextNoLeftBorder(Workbook wb)
        CellStyle style = wb.createCellStyle();
        Font font = contextFont(wb);
        style.setFont(font);
        style.setAlignment(HorizontalAlignment.CENTER);//水平居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        style.setLocked(true);
        style.setWrapText(true);// 自动换行
        style.setBorderBottom(BorderStyle.THIN);//下边框
        style.setBorderTop(BorderStyle.THIN);//上边框
        style.setBorderRight(BorderStyle.THIN);//右
        return style;
    
    /**
     * 单元格样式-无左右边框
     * @param wb
     * @return
     */
    public static CellStyle contextNoLeftRightBorder(Workbook wb)
        CellStyle style = wb.createCellStyle();
        Font font = contextFont(wb);
        style.setFont(font);
        style.setAlignment(HorizontalAlignment.CENTER);//水平居中
        style.setVerticalAlignment(VerticalAlignment.CENTER);//垂直居中
        style.setLocked(true);
        style.setWrapText(true);// 自动换行
        style.setBorderBottom(BorderStyle.THIN);//下边框
        style.setBorderTop(BorderStyle.THIN);//上边框
        return style;
    

三、写入Excel简单示例 

 public void testWriteExcel(HttpServletRequest request, HttpServletResponse response)
        //1.创建book
        Workbook wb = new XSSFWorkbook();
        Sheet sheet = wb.createSheet("sheet名称,可为空");
        //2.创建sheet
        sheet.createFreezePane(1, 2, 0, 0);//冻结首列和前两行


        CellStyle headerStyle = ExcelStyleUtil.headerStyle(wb);
        //3.创建行
        Row row0 = sheet.createRow(0);
        //4.创建单元格
        Cell cell00 = row0.createCell(0);
        cell00.setCellStyle(headerStyle);//设置单元格样式
        cell00.setCellValue("单元格值");
        CellRangeAddress mergeReion = new CellRangeAddress(0, 0, 0, 2);
        sheet.addMergedRegion(mergeReion);//合并首行的前两个单元格

        //(1)第二行设置表头
        Row row1 = sheet.createRow(1);
        for (int i = 0; i < titles.size(); i++) 
            Object title = titles.get(i);
            Cell cell1i = row1.createCell(i);
            cell1i.setCellValue(String.valueOf(title));
            cell1i.setCellStyle(headerStyle);
        
        
        //(2)下面设置表体数据:创建10行3列的表体
        CellStyle contextStyle = ExcelStyleUtil.contextAlignCenterStyle(wb);//内容样式
        for (int i = 0; i < 10; i++) 
            Row rowi = sheet.createRow(i + 2);
            for(int j=0;j<3;j++)
                Cell cellij = rowi.createCell(j);
                cellij.setCellValue("单元格值");
                sheet.setColumnWidth(j,5000);//设置列宽
                cellij.setCellStyle(contextStyle);
            
        
        //(3)导出到浏览器
        try
            ExcelUtilByPOI.exportFile(request,response,wb,"文件名");//调用工具方法
        catch (Exception e)
            throw new BaseException(EPowerResultCode.DOWNLOAD_FILE_FAIL);
        
    

python的excel读取和写入

参考技术A现在常用的处理excel的方法大多是numpy,但是之前已经习惯了用xlrd的工具,所以也记录一下祖传的excel读取/创建/写入:1.读取excel:2.创建一个excel:3.写入excel: 查看详情

java使用poi读取和写入excel指南

Java使用POI读取和写入Excel指南做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求;网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的ApachePOI4.0.1版本来总结一下整... 查看详情

java的poi技术读取excel数据

这篇blog主要是讲述java中poi读取excel,而excel的版本包括:2003-2007和2010两个版本,即excel的后缀名为:xls和xlsx。读取excel和MySQL相关: java的poi技术读取Excel数据到MySQL 你也可以在: java的poi技术读取和导入Excel 了解... 查看详情

fckeditor.net_2.6.4在c#怎么使用啊?包括写入数据库和从数据库读取。谢谢啦!

...K。另外可以调用用户的OFFICE了。取值就是内容=CONTENT.value读取就是CONTENT.vale=数据库内容参考技术A'初始化excel工作环境DimexappAsMicrosoft.Office.Interop.Excel.Application=NewMicrosoft.Office.Interop.Excel.Application'定义excel应用程序DimexbookAsMicr... 查看详情

使用python读取excel中的数据,并重新写入到新的excel中

参考技术A使用Python3运行起初是读取excel中的数据,进行相关的计算将结果追加在后面,没有找到合适的办法,就只能采用这种读取数据,进行相关操作,重新写入的方法(1)使用xlrd打开xls文件,读取数据(2)将需要的数据放进list中... 查看详情

CPU读写指令统计(包括程序的读取)

】CPU读写指令统计(包括程序的读取)【英文标题】:StatisticsofCPUreadversuswriteinstructions(includingreadingofprogram)【发布时间】:2017-05-1415:45:32【问题描述】:我正在寻找内存读取和写入CPU指令(包括读取程序的读取指令)之间的百分... 查看详情

从 excel 表中读取并将确切的字符写入 json 文件

】从excel表中读取并将确切的字符写入json文件【英文标题】:Readingfromexcelsheetandwritingexactcharacterstothejsonfile【发布时间】:2019-01-2023:53:15【问题描述】:我有一个excel表,我正在从中读取并将读取的值写入json文件。但问题是字符... 查看详情

如何使用 Ruby 读取和写入同一个 EXCEL 文件?

】如何使用Ruby读取和写入同一个EXCEL文件?【英文标题】:HowtoreadfromandwritetothesameEXCELfileusingRuby?【发布时间】:2013-04-0423:31:02【问题描述】:我想使用Ruby读取和写入同一个EXCEL文件(file.xls)。我尝试使用不允许写入文件的Roogem。... 查看详情

如何在同一循环中“从 .csv 读取并写入 excel”

】如何在同一循环中“从.csv读取并写入excel”【英文标题】:HowTo\'ReadFrom.csvandWriteToexcel\'InTheSameLoop【发布时间】:2019-05-2821:40:56【问题描述】:我正在尝试从.csv文件中读取数据并将该数据粘贴到3270终端屏幕上,同时将这些尝试... 查看详情

从 excel 读取数据并使用 specflow 写入特征文件

】从excel读取数据并使用specflow写入特征文件【英文标题】:Readdatafromexcelandwritetofeaturefileusingspecflow【发布时间】:2015-02-2109:51:17【问题描述】:我目前正在使用specflow进行单元测试,但我的复杂性在于我想在运行测试之前从excel... 查看详情

easyexcel专题excel读取写入上传和下载(代码片段)

一、将10万条数据从Excel读取出来        读取支持多标题,我们只需要指定最后一行的标题的行号即可,例如上述excel标题的行号为1,因此需要设置headRowNumber为1。          定义User类,使用User类映射excel... 查看详情

easyexcel专题excel读取写入上传和下载(代码片段)

一、将10万条数据从Excel读取出来        读取支持多标题,我们只需要指定最后一行的标题的行号即可,例如上述excel标题的行号为1,因此需要设置headRowNumber为1。          定义User类,使用User类映射excel... 查看详情

easyexcel专题excel读取写入上传和下载(代码片段)

一、将10万条数据从Excel读取出来        读取支持多标题,我们只需要指定最后一行的标题的行号即可,例如上述excel标题的行号为1,因此需要设置headRowNumber为1。          定义User类,使用User类映射excel... 查看详情

excel用python读取清洗后怎么写入数据

参考技术A导入xlrd库。要导入xlrd库,它是读取excel中数据的库,解压所下载的压缩包,用cmd命令行CD到解压目录,执行pythonsetup.pyinstall命令,要导入xlwt库,它是开发人员用于生成与MicrosoftExcel版本95到2003兼容的电子表格文件的库... 查看详情

excel文件的读取和写入(代码片段)

...建excel文件test.xls和写入内容  2、excel文件的内容读取importxlrdwork=xlrd.open_workbook(‘test.xls‘,‘r‘)sheet=work.sheet_by_index(0)print(sheet.nrows)#查看行数print(sheet.cell_value(1,2))#获取单元格内容3、向excel写入内容importxlrdfromxlutils.copyimpor... 查看详情

无需安装任何东西即可读取/写入 Excel 文件

】无需安装任何东西即可读取/写入Excel文件【英文标题】:Read/writeExcelfilewithoutinstallinganything【发布时间】:2021-03-0313:29:01【问题描述】:我有一个Excel.xlsx文件。我想从文件中读取数据并将数据写回文件;没有图形、方程式、图... 查看详情

pandas之dateframe实现excel读取与写入(代码片段)

...对数据进行到出到Excel,直观的给别人参阅,或从Excel中读取数据进行操作和分析依赖库pandas可简单的读出和写入1,根据Excel读取(需安装xlrd库)importnumpyasnpimportpandasaspdpd.read_excel("test.xlsx",‘sheet1‘)2,到出Excel文件(需安装openpy... 查看详情

PHP:读取和写入 Excel 文件

】PHP:读取和写入Excel文件【英文标题】:PHP:readingfromandwritingtoanExcelfile【发布时间】:2011-01-2411:43:29【问题描述】:假设我在单元格A1-Ax中有一些数据,我应该从中获取这些数据、处理并将结果写入B1-Bx、C1-Cx和D1-Dx单元格。最好... 查看详情