精华内容
下载资源
问答
  • 在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其实最希望的方式是Excel是什么,那POI取...

    在用POI读取Excel内容时,经常会遇到数据格式化的问题.

    比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其实最希望的方式是Excel是什么,那POI取出来就是什么,不要搞任何转换.

    网上搜罗各种格式化方式后,找到最满意的一种:

    import org.apache.poi.hssf.usermodel.HSSFDataFormatter;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    
    public Object getValue(Cell cell) {
        if (cell == null)
            return "";
        //如果是日期类型(POI会把日期转数字)
        if (cell.getCellType() == cell.CELL_TYPE_NUMERIC) {
            //Check if a cell contains a date
            if (HSSFDateUtil.isCellDateFormatted(cell)) {
                Date d = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
                return new SimpleDateFormat("yyyy-MM-dd").format(d);
            }
        }
      //如果是中文类型的日期(转为xxxx-xx-xx格式)  
    // m月d日 :dataFormat=58,dataFormatString=reserved-0x1c
    //yyyy年m月d日 :dataFormat=31,dataFormatString=reserved-0x1f
    if (cell.getCellStyle().getDataFormat() == 58 || cell.getCellStyle().getDataFormat() == 31)
    return DateUtil.date2string(cell.getDateCellValue(), DateUtil.YYYY_MM_DD);
    HSSFDataFormatter df = new HSSFDataFormatter(); return df.formatCellValue(cell); }

    这样,拿到的数据就都是原来的样子了

     

    转载于:https://www.cnblogs.com/KeepYongth/p/6232106.html

    展开全文
  • poi读取excel单元格的数字格式化

    千次阅读 2018-03-16 16:29:16
    我的需求是,在excel显示的啥导入进来就是啥但实际poi导入后,数字经常会转换为科学计数法,或者是莫名多了很多位小数 public static Object getCellValue(org.apache.poi.ss.usermodel.Cell hssfCell) { ...

    我的需求是,在excel显示的啥导入进来就是啥

    但实际poi导入后,数字经常会转换为科学计数法,或者是莫名多了很多位小数


    	public static Object getCellValue(org.apache.poi.ss.usermodel.Cell hssfCell) {
    		      if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) {
    		          // 返回布尔类型的值
    		          return String.valueOf(hssfCell.getBooleanCellValue());
    		      } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) {
    		          // 返回数值类型的值
    		          Object inputValue = null;// 单元格值
    		          Long longVal = Math.round(hssfCell.getNumericCellValue());
    		          Double doubleVal = hssfCell.getNumericCellValue();
    		          if(Double.parseDouble(longVal + ".0") == doubleVal){   //判断是否含有小数位.0
    		              inputValue = longVal;
    		          }
    		          else{
    		              inputValue = doubleVal;
    		          }
    		          DecimalFormat df = new DecimalFormat("#.##########");  //格式化为n位小数,按需修改
    		          return String.valueOf(df.format(inputValue));      //返回String类型
    		      } else {
    		          // 返回字符串类型的值
    		          return String.valueOf(hssfCell.getStringCellValue());
    		      }
    	}


    展开全文
  • 我有一个带有日期的EXCEL文件.它们的格式为TEXT,例如:= TEXT...为什么POI无法读取格式化的文本值? 我不想在JAVA应用程序中设置日期格式,因为EXCEL文件应定义格式(每个值可能不同). 这是我读取单元格值的代码...

    我有一个带有日期的EXCEL文件.它们的格式为TEXT,例如:= TEXT(TODAY();“ yyyy-MM-dd”)

     

    在EXCEL中,日期已正确设置为文本格式,但是当我使用Apache POI读取单元格时,它将返回数字值.
    为什么?为什么POI无法读取格式化的文本值?

    我不想在JAVA应用程序中设置日期格式,因为EXCEL文件应定义格式(每个值可能不同).

    这是我读取单元格值的代码:

     

    private static String getString(Cell cell) {
     if (cell == null) return null; 
    
     if (cell.getCellTypeEnum() != CellType.FORMULA) { 
      switch (cell.getCellTypeEnum()) { 
       case STRING: 
        return cell.getStringCellValue().trim(); 
       case BOOLEAN: 
        return String.valueOf(cell.getBooleanCellValue());
       case NUMERIC: 
        return String.valueOf(cell.getNumericCellValue()); 
       case BLANK: 
        return null; 
       case ERROR: 
        throw new RuntimeException(ErrorEval.getText(cell.getErrorCellValue())); 
       default: 
        throw new RuntimeException("unexpected cell type " + cell.getCellTypeEnum());
      }
     } 
     FormulaEvaluator evaluator = cell.getSheet().getWorkbook().getCreationHelper().createFormulaEvaluator();
     try { 
      CellValue cellValue = evaluator.evaluate(cell); 
      switch (cellValue.getCellTypeEnum()) { 
       case NUMERIC: 
        return String.valueOf(cellValue.getNumberValue());
       case STRING: 
        return cellValue.getStringValue().trim(); 
       case BOOLEAN: 
        return String.valueOf(cellValue.getBooleanValue()); 
       case ERROR: 
        throw new RuntimeException(ErrorEval.getText(cellValue.getErrorValue())); 
       default: 
        throw new RuntimeException("unexpected
    cell type " + cellValue.getCellTypeEnum()); 
      } 
     } catch (RuntimeException e) { 
      throw new RuntimeException("Could not evaluate the value of " + cell.getAddress() + " in sheet " + cell.getSheet().getSheetName(), e);
     }
    }

    最佳答案

    仅当使用的Excel不是英语时,才会出现此问题.那么该公式实际上不是例如= TEXT(A2,“ yyyy-MM-dd”),而是例如在我的德语Excel中为= TEXT(A2,“ JJJJ-MM-TT”).

     

    如您所见,尽管所有其他公式部分始终都是en_US语言环境,但TEXT函数中的format部分将始终与语言环境相关.这是因为格式部分位于公式内的字符串中,不会更改.因此,德语为= TEXT(A2,“ JJJJ-MM-TT”)(年份= Jahr,Day =标记),法语为= TEXT(A2,“ AAAA-MM-JJ”)(年份=Année, Day = Jour).

    而且由于apache poi的FormulaEvaluator到目前为止还没有语言环境设置,因此该公式无法正确评估.

    然后,我们有两种可能性.

    首先,我们希望存储的单元格值应该是所需的字符串.因此,如果单元格公式以“ TEXT”开头并且包含“ JJJJ-MM-TT”,则不要进行评估,因为这样做不合适.而是从Excel的上一次评估中获取字符串单元格值.

    其次,我们可以在公式中用en_US替换语言环境相关的格式部分,然后让apache poi求值.至少如果我们只想读取而不是重写Excel文件,则不会破坏Excel文件中的内容.

    代码优先方法:

     

    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.ss.usermodel.CellType;
    import org.apache.poi.ss.util.*;
    
    import org.apache.poi.ss.formula.eval.ErrorEval;
    
    import java.io.FileInputStream;
    
    class ReadExcelExample {
    
     private static String getString(Cell cell, FormulaEvaluator evaluator) {
      if (cell == null) return "null";
      String text = "";
      switch (cell.getCellType()) {
      //switch (cell.getCellTypeEnum()) {
       case STRING:
        text = cell.getRichStringCellValue().getString();
       break;
       case NUMERIC:
        if (DateUtil.isCellDateFormatted(cell)) {
         text = String.valueOf(cell.getDateCellValue());
        } else {
         text = String.valueOf(cell.getNumericCellValue());
        }
       break;
       case BOOLEAN:
        text = String.valueOf(cell.getBooleanCellValue());
       break;
       case FORMULA:
        text = cell.getCellFormula();
    
        //if formula is TEXT(...,"JJJJ-MM-TT") then do not evaluating:
        if (cell.getCellFormula().startsWith("TEXT") && cell.getCellFormula().contains("JJJJ-MM-TT")) {
         text = text + ": value got from cell = " + cell.getRichStringCellValue().getString();
    
        } else {
         CellValue cellValue = evaluator.evaluate(cell); 
         switch (cellValue.getCellType()) {
         //switch (cellValue.getCellTypeEnum()) {
          case STRING:
           text = text + ": " + cellValue.getStringValue();
          break;
          case NUMERIC:
           if (DateUtil.isCellDateFormatted(cell)) {
            text = text + ": " + String.valueOf(DateUtil.getJavaDate(cellValue.getNumberValue()));
           } else {
            text = text + ": " + String.valueOf(cellValue.getNumberValue());
           }
          break;
          case BOOLEAN:
           text = text + ": " + String.valueOf(cellValue.getBooleanValue());
          break;
          case ERROR:
           throw new RuntimeException("from CellValue: " + ErrorEval.getText(cellValue.getErrorValue()));
          default:
           throw new RuntimeException("unexpected cellValue type " + cellValue.getCellType()); 
         }
        }
       break;
       case ERROR:
        throw new RuntimeException("from Cell: " + ErrorEval.getText(cell.getErrorCellValue())); 
       case BLANK:
        text = "";
       break;
       default:
        throw new RuntimeException("unexpected cell type " + cell.getCellType());
      }
    
      return text;
     }
    
     public static void main(String[] args) throws Exception {
    
      //Workbook wb  = WorkbookFactory.create(new FileInputStream("SAMPLE.xls"));
      Workbook wb  = WorkbookFactory.create(new FileInputStream("SAMPLE.xlsx"));
    
      DataFormatter formatter = new DataFormatter(new java.util.Locale("en", "US"));
      FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
    
      Sheet sheet = wb.getSheetAt(0);
      for (Row row : sheet) {
       for (Cell cell : row) {
        CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
        System.out.print(cellRef.formatAsString());
        System.out.print(" - ");
    
        String text = "";
        try {
        text = getString(cell, evaluator);
        } catch (Exception ex) {
         text = ex.toString();
        }
        System.out.println(text);
    
       }
      }
    
      wb.close();
    
     }
    }

    德文Excel:

     

    结果:

     

    A1 - Value
    B1 - Formula
    A2 - Fri Jan 11 00:00:00 CET 2019
    B2 - TEXT(A2,"JJJJ-MM-TT"): value got from cell = 2019-01-11
    A3 - 123.45
    B3 - A3*2: 246.9
    B4 - java.lang.RuntimeException: from CellValue: #DIV/0!
    B5 - TODAY(): Fri Jan 11 00:00:00 CET 2019
    B6 - B5=A2: true
    A7 - java.lang.RuntimeException: from CellValue: #N/A
    B8 - TEXT(TODAY(),"JJJJ-MM-TT"): value got from cell = 2019-01-11

    英文Calc:

     

    结果:

     

    A1 - Value
    B1 - Formula
    A2 - Fri Jan 11 00:00:00 CET 2019
    B2 - TEXT(A2,"yyyy-MM-dd"): 2019-01-11
    A3 - 123.45
    B3 - A3*2: 246.9
    B4 - java.lang.RuntimeException: from CellValue: #DIV/0!
    B5 - TODAY(): Fri Jan 11 00:00:00 CET 2019
    B6 - B5=A2: true
    A7 - java.lang.RuntimeException: from CellValue: #N/A
    B8 - TEXT(TODAY(),"yyyy-MM-dd"): 2019-01-11

    代码第二种方法(将与语言环境相关的格式部分替换为en_US一种):

     

    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.ss.usermodel.CellType;
    import org.apache.poi.ss.util.*;
    
    import java.io.FileInputStream;
    import java.util.Locale;
    
    class ExcelEvaluateTEXTDiffLocales {
    
     private static String getString(Cell cell, DataFormatter formatter, FormulaEvaluator evaluator, Locale locale) {
      String text = "";
      if (cell.getCellType() == CellType.FORMULA) {
       String cellFormula = cell.getCellFormula();
       text += cellFormula + ":= ";
    
       if (cellFormula.startsWith("TEXT")) {
        int startFormatPart = cellFormula.indexOf('"');
        int endFormatPart = cellFormula.lastIndexOf('"') + 1;
        String formatPartOld = cellFormula.substring(startFormatPart, endFormatPart);
        String formatPartNew = formatPartOld;
        if ("de".equals(locale.getLanguage())) {
         formatPartNew = formatPartNew.replace("T", "D"); // Tag = Day
         // Monat = Month
         formatPartNew = formatPartNew.replace("J", "Y"); // Jahr = Year
         //...
        } else if ("fr".equals(locale.getLanguage())) {
         formatPartNew = formatPartNew.replace("J", "D"); // Jour = Day
         // Mois = Month
         formatPartNew = formatPartNew.replace("A", "Y"); // Année = Year
         //...
        } //...
        cellFormula = cellFormula.replace(formatPartOld, formatPartNew);
        cell.setCellFormula(cellFormula);
       }
    
      }
      try {
       text += formatter.formatCellValue(cell, evaluator);
      } catch (org.apache.poi.ss.formula.eval.NotImplementedException ex) {
       text += ex.toString();
      }
    
      return text;
     }
    
     public static void main(String[] args) throws Exception {
    
      //Workbook wb  = WorkbookFactory.create(new FileInputStream("SAMPLE.xls"));
      Workbook wb  = WorkbookFactory.create(new FileInputStream("SAMPLE.xlsx"));
    
      Locale locale = new Locale("fr", "CH");
      DataFormatter formatter = new DataFormatter(locale);
      FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
    
      Sheet sheet = wb.getSheetAt(0);
      for (Row row : sheet) {
       for (Cell cell : row) {
        CellReference cellRef = new CellReference(row.getRowNum(), cell.getColumnIndex());
        System.out.print(cellRef.formatAsString());
        System.out.print(" - ");
    
        String text = "";
        text = getString(cell, formatter, evaluator, locale);
    
        System.out.println(text);
    
       }
      }
    
      wb.close();
    
     }
    }

    法语Calc:

     

    结果:

     

    A1 - Value
    B1 - Formula
    A2 - 1/11/2019
    B2 - TEXT(A2,"AAAA-MM-JJ"):= 2019-01-11
    A3 - 123.45
    B3 - A3*2:= 246.9
    B4 - 1/A4:= #DIV/0!
    B5 - TODAY():= 1/12/2019
    B6 - B5=A2:= FALSE
    A7 - NA():= #N/A
    B8 - TEXT(TODAY(),"AAAA-MM-JJ"):= 2019-01-12

    提示:这里使用的apache poi版本是4.0.1.较低的版本可能会有进一步的评估问题.

    展开全文
  • 下面小编就为大家带来一篇POI对Excel自定义日期格式读取(实例代码)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java POI SAX模式 读取大数据Excel

    千次阅读 2018-02-28 17:48:46
    业务描述: 后缀为.xlsx的Excel文件,只有一个sheet页,且该sheet页对应...因为Excel包含大量数据,如果采用POI的用户模式,会消耗大量内容,容易造成内存溢出 java.lang.OutOfMemoryError 所以这里采用SAX模式(...

    业务描述:
    后缀为.xlsx的Excel文件,只有一个sheet页,且该sheet页对应数据库中的1张表,从A1开始有数据,第1行的数据对应表的各个字段,从第2行开始是要导入的数据,将该Excel导入到数据库中
    解决方案:
    因为Excel包含大量数据,如果采用POI的用户模式,会消耗大量内容,容易造成内存溢出

    java.lang.OutOfMemoryError

    所以这里采用SAX模式(事件模式)读取,需要注意的是SAX模式读取,大部分格式的数据都可以读取成String类型,日期格式不在此列,需要特殊处理,处理方式详见下方code
    code:

    import java.io.InputStream;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.regex.Pattern;
    
    import org.apache.log4j.Logger;
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.ss.usermodel.DataFormatter;
    import org.apache.poi.xssf.eventusermodel.XSSFReader;
    import org.apache.poi.xssf.model.SharedStringsTable;
    import org.apache.poi.xssf.model.StylesTable;
    import org.apache.poi.xssf.usermodel.XSSFCellStyle;
    import org.apache.poi.xssf.usermodel.XSSFRichTextString;
    import org.xml.sax.Attributes;
    import org.xml.sax.ContentHandler;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.helpers.XMLReaderFactory;
    
    /**
     * <p>ClassName: ExampleEventUserModel</p>
     * <p>Description: 事件模式</p>
     * <p>Author: sloth</p>
     * <p>Date: 2018-02-28</p>
     */
    public class ExampleEventUserModel {
        /**
         * <p>Field stylesTable: 单元格样式</p>
         */
        public static StylesTable stylesTable;
    
        /**
         * <p>Description: 处理单个sheet(本案例调用此方法)</p>
         * @param filename 文件名带路径
         * @throws Exception 异常
         */
        public void processOneSheet(String filename) throws Exception {
            OPCPackage pkg = OPCPackage.open(filename);
            XSSFReader r = new XSSFReader(pkg);
            SharedStringsTable sst = r.getSharedStringsTable();
            stylesTable = r.getStylesTable();
            XMLReader parser = fetchSheetParser(sst);
    
            // To look up the Sheet Name / Sheet Order / rID,
            // you need to process the core Workbook stream.
            // Normally it's of the form rId# or rSheet#
            InputStream sheet = r.getSheet("rId1");
            InputSource sheetSource = new InputSource(sheet);
            parser.parse(sheetSource);
            sheet.close();
        }
    
        /**
         * <p>Description: 处理所有sheet</p>
         * @param filename 文件名带路径
         * @throws Exception 异常
         */
        public void processAllSheets(String filename) throws Exception {
            OPCPackage pkg = OPCPackage.open(filename);
            XSSFReader r = new XSSFReader(pkg);
            SharedStringsTable sst = r.getSharedStringsTable();
    
            XMLReader parser = fetchSheetParser(sst);
    
            Iterator<InputStream> sheets = r.getSheetsData();
            while (sheets.hasNext()) {
                System.out.println("Processing new sheet:\n");
                InputStream sheet = sheets.next();
                InputSource sheetSource = new InputSource(sheet);
                parser.parse(sheetSource);
                sheet.close();
                System.out.println("");
            }
        }
    
        /**
         * <p>Description: 获取XML访问对象</p>
         * @param sst 共享字符串表对象
         * @return XMLReader XML访问对象
         * @throws SAXException SAX异常
         */
        public XMLReader fetchSheetParser(SharedStringsTable sst) throws SAXException {
            XMLReader parser = XMLReaderFactory.createXMLReader("com.sun.org.apache.xerces.internal.parsers.SAXParser");
            ContentHandler handler = new SheetHandler(sst);
            parser.setContentHandler(handler);
            return parser;
        }
    
        /**
         * <p>ClassName: SheetHandler</p>
         * <p>Description: sheet处理类</p>
         * <p>Author: sloth</p>
         * <p>Date: 2018-02-26</p>
         */
        private static class SheetHandler extends DefaultHandler {
            /**
             * <p>Field logger: 日志</p>
             */
            private static Logger logger = Logger.getLogger(SheetHandler.class);
            /**
             * <p>Field sst: 共享字符串表对象</p>
             */
            private SharedStringsTable sst;
            /**
             * <p>Field lastContents: 单元格内容</p>
             */
            private String lastContents;
            /**
             * <p>Field nextIsString: 是否是字符串</p>
             */
            private boolean nextIsString;
            /**
             * <p>Field nextIsDate: 是否是日期</p>
             */
            private boolean nextIsDate;
            /**
             * <p>Field mapList: 读取Excel数据集(该变量可去除,因为集合中只有一个map)</p>
             */
            private ArrayList<HashMap<String, String>> mapList;
            /**
             * <p>Field map: 键值对{单元格列名,单元格值}</p>
             */
            private HashMap<String, String> map;
            /**
             * <p>Field key: 单元格坐标</p>
             */
            private String key;
            /**
             * <p>Field value: 单元格值</p>
             */
            private String value;
            /**
             * <p>Field index: 样式index</p>
             */
            private int index;
    
            /**
             * <p>Description: 构造函数初始化</p>
             * @param sst 共享字符串表对象
             */
            private SheetHandler(SharedStringsTable sst) {
                this.sst = sst;
                this.mapList = new ArrayList<HashMap<String, String>>();
                this.map = new HashMap<String, String>();
            }
    
            /**
             * <p>Title: startElement</p>
             * <p>Description: </p>
             * @param uri uri
             * @param localName localName
             * @param name XML标签名
             * @param attributes XML标签对象
             * @throws SAXException SAX异常
             * @see org.xml.sax.helpers.DefaultHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
             */
            public void startElement(String uri, String localName, String name, Attributes attributes) throws SAXException {
                // c => cell
                if ("c".equals(name)) {
                    // Print the cell reference
                    this.key = attributes.getValue("r");
                    this.value = "";
                    System.out.print(attributes.getValue("r") + " - ");
                    // Figure out if the value is an index in the SST
                    String cellType = attributes.getValue("t");
                    if (cellType != null && "s".equals(cellType)) {
                        this.nextIsString = true;
                    } else {
                        /** 单元格是日期格式时c标签中s属性的值是数字 **/
                        cellType = attributes.getValue("s");
                        System.out.println(cellType);
                        this.nextIsString = false;
                    }
                    /** 判断是否是日期格式 **/
                    if (cellType != null && Pattern.compile("^[-\\+]?[\\d]*$").matcher(cellType).matches()) {
                        this.index = Integer.parseInt(cellType);
                        this.nextIsDate = true;
                    } else {
                        this.nextIsDate = false;
                    }
                }
                // Clear contents cache
                this.lastContents = "";
            }
    
            /**
             * <p>Title: endElement</p>
             * <p>Description: </p>
             * @param uri uri
             * @param localName localName
             * @param name XML标签名
             * @throws SAXException SAX异常
             * @see org.xml.sax.helpers.DefaultHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
             */
            public void endElement(String uri, String localName, String name) throws SAXException {
                // Process the last contents as required.
                // Do now, as characters() may be called more than once
                if (this.nextIsString) {
                    int idx = Integer.parseInt(this.lastContents);
                    this.lastContents = new XSSFRichTextString(this.sst.getEntryAt(idx)).toString();
                    this.nextIsString = false;
                }
                if (this.nextIsDate && !"".equals(this.lastContents)) {
                    XSSFCellStyle style = stylesTable.getStyleAt(this.index);
                    short formatIndex = style.getDataFormat();
                    String formatString = style.getDataFormatString();
                    if (formatString.contains("m/d/yy")) {
                        formatString = "yyyy-MM-dd hh:mm:ss";
                    }
                    DataFormatter formatter = new DataFormatter();
                    this.lastContents = formatter.formatRawCellContents(Double.parseDouble(this.lastContents), formatIndex,
                        formatString);
                    System.out.println(this.lastContents);
                    this.nextIsDate = false;
                }
                // v => contents of a cell
                // Output after we've seen the string contents
                if ("v".equals(name)) {
                    System.out.println(this.lastContents);
                    this.value = this.lastContents;
                } else if ("c".equals(name)) {
                    this.map.put(this.key.replaceAll("\\d+", ""), this.value);
                } else if ("row".equals(name)) {
                    String nowRow = this.key.replaceAll(this.key.replaceAll("\\d+", ""), "");
                    if (!"1".equals(nowRow)) {
                        this.mapList.add(this.map);
                        logger.info(this.mapList);
                        insert(nowRow);
                    }
                    /** 清空存储集 **/
                    this.mapList.clear();
                    this.map.clear();
                }
    
            }
    
            /**
             * <p>Description: 插入数据</p>
             * @param nowRow 插入数据所在行(用于检查Excel哪一行数据插入报错)
             */
            private void insert(String nowRow) {
                /** 迭代数据,通过对应列,获取数据库字段和值,拼接SQL **/
                ......
                /** 迭代数据,通过对应列,获取数据库字段和值,拼接SQL **/   
            }
    
            /**
             * <p>Title: characters</p>
             * <p>Description: </p>
             * @param ch 字符数组
             * @param start 起始位
             * @param length 长度
             * @throws SAXException SAX异常
             * @see org.xml.sax.helpers.DefaultHandler#characters(char[], int, int)
             */
            public void characters(char[] ch, int start, int length) throws SAXException {
                this.lastContents += new String(ch, start, length);
            }
        }
    
        public static void main(String[] args) throws Exception {
            ExampleEventUserModel example = new ExampleEventUserModel();
            // System.out.println("11");
            example.processOneSheet("D:/" + "****" + ".xlsx");
            // example.processAllSheets(args[0]);
        }
    }
    
    展开全文
  • POI 2.5.1读取日期格式

    2019-06-04 09:51:03
    日期也是数值类型,中文日期带年月日的,在HSSFDateUtil.isCellDateFormatted(cell)中读取不出来,所以手动判断 // 数值类型(取值用cell.getNumericCellValue() 或cell.getDateCellValue()) case HSSFCell.CELL_...
  • poi,jxl读取excel文件

    2017-07-24 15:47:09
    poi读取excel文件 package test_poi; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream;
  • cell.getCellStyle().getDataFormat...POI读取出来的结果也是有些变化的;需要在实际项目中进行确认; 时间格式的遍历: /** * 处理数据类型 * * @param attributes */ public void setNextData...
  • 当使用poi去处理大的excel文件时,直接使用poi里提供的数据读取方法容易产生内存溢出的情况,在这里插入代码片这时候需要将xlsx格式的文件转化为xml文件来读取。 对于新手来说,先来看看xlsx格式与xml格式的区别吧...
  • 本文是在搭完ssm框架之上实现的读取excel文件,已实现功能,如有问题可在评论区询问使用的jar包&lt;!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&gt;&lt;dependency&gt; &lt...
  • poi导入读取时间格式问题

    千次阅读 2017-11-10 08:34:57
    所有日期格式都可以通过getDataFormat()值来判断 yyyy-MM-dd-----14 yyyy年m月d日---  31 yyyy年m月-------57 m月d日 ----------58 HH:mm-----------20 h时mm分 -------32 ...
  • POI读取Excel封装

    万次阅读 2019-08-02 17:33:46
    POI读取Excel进行了一个简单封装,代码如下: package com.aline.zkdm; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss....
  • 原因:没有导入xmlbeans-2.6.0.jar包,建议在使用poi时,将所有包都导入进工程。 2、案例源码 import java.io.FileInputStream; import java.io.IOException; import java.io.InputStrea...
  • POI读取Excel

    2017-04-21 09:20:43
    POI读取Excel文件
  • POI、SAX读取Excel大文件

    千次阅读 2011-11-15 21:06:19
    poi 读取文件分为两种模式:用户模型、事件用户模型,第一种方案是以DOM方式读取Excel,好处是读取操作方便,不足的是一次性将文件加载到内存; 第二种方案是SAX读取Excel,好处是内存占用小,因为每次只读取陪份...
  • 1、依赖包 maven依赖(3.6是比较稳定的版本,可用于生产环境) <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency>...org.apache.poi</groupId> ...
  • 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....
  • java使用poi.3.10读取excel 2010

    千次阅读 2014-04-19 11:16:22
    package poi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.p
  • 试试这个HWPFDocumentCore wordDocument = WordToHtmlUtils.loadDoc(new FileInputStream("D:\\temp\\seo\\1.doc"));WordToHtmlConverter wordToHtmlConverter = new WordToHtmlConverter(DocumentBuilderFactory....
  •  //使用DecimalFormat对double进行了格式化,随后使用format方法获得的String就是你想要的值了。  DecimalFormat df = new DecimalFormat("0");  return String.valueOf(df.format(cell.getNumericCellValue())...
  • 1.引入jar包依赖   <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version>...
  • 使用java进行excel读取和写入 1.添加处理excel的依赖jar包,直接上pom文件吧 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=...
  • package poi; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Iterator; import org.apache.poi.hssf.usermodel.HSSFCell; import org.a...
  • 【Apache POI】Java 读取Excel文件

    千次阅读 2017-03-21 22:04:39
    Excel内容如下: 封装Excel行列字段的Bean:   public class Employee { private String name; private String gender; private int age; private String department;... * 注意:读取日期操作要将E...
  • 我们通常用POI去解析,在使用new HSSFWorkbook(NEW FileInputStream(excelFile))来读取Workbook,对Excel2003以前(包括2003)的版本没有问题,但读取Excel2007时发生如下异常: org.apache.poi.poifs.filesystem.Of...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,407
精华内容 2,562
关键字:

poi格式化读取