精华内容
下载资源
问答
  • 请问,在Excel里面,如何判断单元格的数据类型,比如是数字、字符,公式? 谢谢了 如果有C#相关代码,不胜感谢。
  • 1、POI读取Excel时判断单元格数据类型: CELL_TYPE_NUMERIC 数值型 0 CELL_TYPE_STRING 字符串型 1 CELL_TYPE_FORMULA 公式型 2 CELL_TYPE_BLANK 空值 3 CELL_TYPE_BOOLEAN 布尔型 4 CELL_TYPE_ERROR 错误 5 2、在...

    1、POI读取Excel时判断单元格数据类型:

    CELL_TYPE_NUMERIC 数值型 0
    CELL_TYPE_STRING 字符串型 1
    CELL_TYPE_FORMULA 公式型 2
    CELL_TYPE_BLANK 空值 3
    CELL_TYPE_BOOLEAN 布尔型 4
    CELL_TYPE_ERROR 错误 5

    2、在jeecg中获取Excel中的值:

    源码是这样的:jeecgframework/poi/excel/imports/CellValueServer.java

    private Object getCellValue(String xclass, Cell cell, ExcelImportEntity entity)
      {
        if (cell == null) {
          return "";
        }
        Object result = null;
    
        if (("class java.util.Date".equals(xclass)) || ("class java.sql.Time".equals(xclass))) {
          if (0 == cell.getCellType())
          {
            result = cell.getDateCellValue();
          } else {
            cell.setCellType(1);
            result = getDateData(entity, cell.getStringCellValue());
          }
          if ("class java.sql.Time".equals(xclass))
            result = new Time(((Date)result).getTime());
        }
        else if (0 == cell.getCellType()) {
          result = Double.valueof(cell.getNumericCellValue());
        } else if (4 == cell.getCellType()) {
          result = Boolean.valueOf(cell.getBooleanCellValue());
        } else {
          result = cell.getStringCellValue();
        }
        return result;
      }

    3、在使用中发现,Excel中的整数在导入后,悄悄的加了小数点


    为了去掉不该出现的小数点,修改源码中的格式转换部分,发现源码中直接使用的0和4数值去判断,不太了解什么意思,所以查了单元格数据类型附在文章的开始部分,0为数值型,在进行格式转化是,转为Double型了,所以悄悄的加上了小数点,这里为满足自己的业务需要,直接强转为int型,因为我的数值本身就是int型,修改后为

    private Object getCellValue(String xclass, Cell cell, ExcelImportEntity entity)
      {
        if (cell == null) {
          return "";
        }
        Object result = null;
    
        if (("class java.util.Date".equals(xclass)) || ("class java.sql.Time".equals(xclass))) {
          if (0 == cell.getCellType())
          {
            result = cell.getDateCellValue();
          } else {
            cell.setCellType(1);
            result = getDateData(entity, cell.getStringCellValue());
          }
          if ("class java.sql.Time".equals(xclass))
            result = new Time(((Date)result).getTime());
        }
        else if (XSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
          result = (int)cell.getNumericCellValue();
        } else if (XSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
          result = Boolean.valueOf(cell.getBooleanCellValue());
        } else {
          result = cell.getStringCellValue();
        }
        return result;
      }



    展开全文
  • 从上一篇文章我们可以获取到指定单元格的数据,并判断出类型。 这次要做的就是,如果这个单元格数据类型是字符串,我们就去进行子字符串的匹配,说的简单点就是判断指定单元格有没有我们需要找的字符串。 例如:...

    上一篇文章我们可以获取到指定单元格的数据,并判断出类型。

    这次要做的就是,如果这个单元格数据类型是字符串,我们就去进行子字符串的匹配,说的简单点就是判断指定单元格有没有我们需要找的字符串。

    例如:判断单元格J6有没有‘√’,代码如下:

    Sub aa()
        Set a = Range("J6")
        If InStr(a, "√") Then MsgBox (a)
       
        
    End Sub

    这里我们用到函数:InStr,简介请点击链接:InStr详解


    展开全文
  • 在GridView中设置每个单元格的数据

    千次阅读 2015-11-10 16:11:07
    今天做后台开发时,需要实现一...那么如何把取出的int型数据对应成string类型的数据并替换为想要显示的中文呢,这是一个主要问题。 解决方案 通过判断取出的数据是1或0 来设置GridView中状态列的显示内容。 具体方法

    今天做后台开发时,需要实现一个需求是在GridView渲染出来的显示数据的表格中增加一列数据:状态列。增加一列数据是比较简单的,但是,状态的表示在数据库中使用的是1和0而在页面中要显示为打开或关闭;那么如何把取出的int型数据对应成string类型的数据并替换为想要显示的中文呢,这是一个主要问题。

    解决方案

    通过判断取出的数据是1或0 来设置GridView中状态列的显示内容。

    具体方法

    通过GridView1.Rows属性获取GridView中的行,再通过GridView.Rows[i].Cells属性获取GridView中的列,然后通过GridView.Rows[i].Cells[3].Text 属性设置要显示的内容。

    GridView.Rows[i].Cells[3].Text = "显示";

    详细代码:

            /// <summary>
            /// 设置GridView中状态列的显示文本
            /// </summary>
            /// <param name="scds">SystemColumnDataSet scds:记录集</param>
            protected void SetIsShowValues(SystemColumnDataSet scds)
            {
                int rowCount = ClassGridView.Rows.Count;    ///行数
                for (int i = 0; i < rowCount; i++)
                {
                    if (scds.DataList[i].IsShow == 1)
                    {
                        ClassGridView.Rows[i].Cells[3].Text = "显示";     ///设置第三列中的值
                    }
                    else
                    {                        
                        ClassGridView.Rows[i].Cells[3].Text = "不显示";     ///设置第三列中的值
                    }
                }
            }

    展开全文
  • 最近做的一个ITFIN的项目中,导出的数据中有文本格式,也有货币格式,所以为了方便在将来导出的表格中做计算,存放货币先用正则表达式判断数据是否为数值型,如果为数值型,则设置单元格格式为整数或者小数;...




    背 景


      最近做的一个ITFIN的项目中,后台需要用POI实现导出功能,导出的数据中有文本格式,也有货币格式,所以为了方便在将来导出的表格中做计算,存放货币的单元格需要设置为数值类型。

      导出的Excel的单元格都是文本格式(单元格左上角有个小三角):

    这里写图片描述

      费了不少功夫,终于把“小三角”去掉了,这里总结并分享一下问题的解决方法。


      通过poi导出excel的过程大致是这样的:

         规定单元格的格式
            ↓
          创建单元格
            ↓
         设置单元格的格式
            ↓
         设置数据的格式
            ↓
        把数据存放到单元格中
            ↓
          通过IO流输出


    背景POI导出Excel时设置单元格类型为数值类型

      要想存放数值的单元格以数值类型导出,其中最关键的步骤就是上面加粗的两步,设置单元格的格式和向单元格中存放数据。

      核心代码如下:

    	/**
    	 * 导出Excel-2015年11月11日
    	 * 
    	 *@param outPutParam Excel数据实体,包括要导出的excel标头、列标题、数据等
    	 * */
    	private void createContentRows(ExcelParam outPutParam) {
    		HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个Excel文件
    		// 遍历集合数据,产生数据行
    		for (int i = 0; i < outPutParam.getContent().size(); i++) {
    			int rowIndex = i + 2;
    			HSSFRow contentRow = sheet.createRow(rowIndex);
    			Map<String, Object> rowDate = outPutParam.getContent().get(i);
    			//遍历列
    			for (int j = 0; j < outPutParam.getTitleList().size(); j++) {		
    				Title headTitle = outPutParam.getTitleList().get(j);//获取第i行第j列列标题
    				String headerName = headTitle.getName();//获取第j列列标识
    				Object data = rowDate.get(headerName);//获取第i行第j列所放数据
    				HSSFCellStyle contextstyle =workbook.createCellStyle();
    				HSSFCell contentCell = contentRow.createCell(j);				
    				Boolean isNum = false;//data是否为数值型
    				Boolean isInteger=false;//data是否为整数
    				Boolean isPercent=false;//data是否为百分数
    				if (data != null || "".equals(data)) {
    					//判断data是否为数值型
    					isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
    					//判断data是否为整数(小数部分是否为0)
    					isInteger=data.toString().matches("^[-\\+]?[\\d]*$");
    					//判断data是否为百分数(是否包含“%”)
    					isPercent=data.toString().contains("%");
    				}
    				
    				//如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型
    				if (isNum && !isPercent) {
    					HSSFDataFormat df = workbook.createDataFormat(); // 此处设置数据格式
    					if (isInteger) {
    						contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
    					}else{
    						contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
    					}					
    					// 设置单元格格式
    					contentCell.setCellStyle(contextstyle);
    					// 设置单元格内容为double类型
    					contentCell.setCellValue(Double.parseDouble(data.toString()));
    				} else {
    					contentCell.setCellStyle(contextstyle);
    					// 设置单元格内容为字符型
    					contentCell.setCellValue(data.toString());
    				}
    			}
    		}
    	}
    

      如上,有两个比较重要的点:
      1、先用正则表达式判断数据是否为数值型,如果为数值型,则设置单元格格式为整数或者小数;
      2、然后往单元格中存放数据的时候要设置数据的格式为double类型,如果查看poi的源码HSSFCell.java会发现设置数据的方法如下,所以用setCellValue(double)方法即可。

    这里写图片描述


    优化

      到了这里,您可能以为万事大吉啊了,其实上面的代码有个陷阱,如果不经过大数据量的测试是发觉不出来的哦~~

      如果数据量大的话,系统可能会报错“The maximum number of cell styles was exceeded. You can define up to 4000 styles in a .xls workbook”,原因是style创建的次数太多了,解决这个问题的方法很简单,在循环体外面创建单元格格式contextstyle(即把它当成一个“全局”变量),不要在循环内部创建。

      正确的代码如下:

    	/**
    	 * 导出Excel-2015年11月11日
    	 * 
    	 *@param outPutParam Excel数据实体,包括要导出的excel标头、列标题、数据等
    	 * */
    	private void createContentRows(ExcelParam outPutParam) {
    		HSSFWorkbook workbook=new HSSFWorkbook(); //创建一个Excel文件
    		HSSFCellStyle contextstyle =workbook.createCellStyle();
    		// 遍历集合数据,产生数据行
    		for (int i = 0; i < outPutParam.getContent().size(); i++) {
    			int rowIndex = i + 2;
    			HSSFRow contentRow = sheet.createRow(rowIndex);
    			Map<String, Object> rowDate = outPutParam.getContent().get(i);
    			//遍历列
    			for (int j = 0; j < outPutParam.getTitleList().size(); j++) {		
    				Title headTitle = outPutParam.getTitleList().get(j);//获取第i行第j列列标题
    				String headerName = headTitle.getName();//获取第j列列标识
    				Object data = rowDate.get(headerName);//获取第i行第j列所放数据
    				HSSFCell contentCell = contentRow.createCell(j);				
    				Boolean isNum = false;//data是否为数值型
    				Boolean isInteger=false;//data是否为整数
    				Boolean isPercent=false;//data是否为百分数
    				if (data != null || "".equals(data)) {
    					//判断data是否为数值型
    					isNum = data.toString().matches("^(-?\\d+)(\\.\\d+)?$");
    					//判断data是否为整数(小数部分是否为0)
    					isInteger=data.toString().matches("^[-\\+]?[\\d]*$");
    					//判断data是否为百分数(是否包含“%”)
    					isPercent=data.toString().contains("%");
    				}
    				
    				//如果单元格内容是数值类型,涉及到金钱(金额、本、利),则设置cell的类型为数值型,设置data的类型为数值类型
    				if (isNum && !isPercent) {
    					HSSFDataFormat df = workbook.createDataFormat(); // 此处设置数据格式
    					if (isInteger) {
    						contextstyle.setDataFormat(df.getBuiltinFormat("#,#0"));//数据格式只显示整数
    					}else{
    						contextstyle.setDataFormat(df.getBuiltinFormat("#,##0.00"));//保留两位小数点
    					}					
    					// 设置单元格格式
    					contentCell.setCellStyle(contextstyle);
    					// 设置单元格内容为double类型
    					contentCell.setCellValue(Double.parseDouble(data.toString()));
    				} else {
    					contentCell.setCellStyle(contextstyle);
    					// 设置单元格内容为字符型
    					contentCell.setCellValue(data.toString());
    				}
    			}
    		}
    	}
    

      最后导出的正确格式:

    这里写图片描述




    【 转载请注明出处——胡玉洋《POI导出Excel时设置单元格类型为数值类型》


    展开全文
  • 本篇收录针对于POI导入Excel 操作cell一些常用步骤。 获取逻辑行 Workbook wb = null; Sheet sheet = wb.getSheetAt(0); Row row = sheet.getRow(r); 判断隐藏行和隐藏列 row.getZeroHeight() //判断隐藏行 ...
  • POI读取Excel数据类型的判断方法

    千次阅读 2017-07-06 10:40:18
    网上看到许多关于利用POI输出Excel单元格内容的文章,但都是利用Cell.getCellType来获取Excel单元格的数据类型,我也利用这个方法 确实可以判断数据类型,Cell.CELL_TYPE_NUMERIC,Cell.CELL_TYPE_FORMULA,Cell....
  • NPOI获取有公式的单元格数据

    千次阅读 2019-03-04 10:58:17
    如果直接取值取得就是公式,如下图 判断一下类型就可以了
  • 从字符串“”到类型“Double”转换无效 我试着改为: ``` If e.RowIndex >= 0 And IIf(IsDBNull(.CurrentCell.Value), 0, .CurrentCell.Value) <> e.FormattedValue Then... ``` 还是提示错误,怎么破?
  • Excel读取获取数据必须判断数据类型

    千次阅读 2018-01-03 10:24:13
    如之前读取Excel的各种方法,在获取单元格数据的时候要注意,不要直接ToString...在获取数据之前判断数据类型,并根据相应的数据类型去获取,才不会出问题。 private static string GetCellValue(ICell cell) { ob
  • 如何把数据表作为数组进行处理,是编程过程中一个重要技能。学会之后,将大大提高编程技术,也将使数据处理过程变得更加流畅。No.2上图为例,把表格内容作为数组值进行保存,然后通过流程编码对成绩进行一个比较...
  • 在Excel中,添加的控件可以和单元格关联,我们可以操作控件来修改单元格的内容,在下面的文章中,将介绍在Excel中添加几种不同的表单控件的方法,包括:添加文本框(Textbox)单选按钮(Radio button)复选框...
  • 下面是代码分享Sub 交集()Dim sr As Range, sr2 As Range 申明数据类型变量Dim ch As Range, ch2 As RangeFor Each sr In Range("a2:a9") 循环区域单元格If sr.Value = "刘能" Then 条件判断Set ch = sr.EntireRow ...
  • 然后再判断单元格是否为日期格式,如果是的话,创建一个日期格式,再将单元格的内容以这个日期格式显示出来。 如果单元格 不是日期格式,那么则直接得到NUMERIC的值就行了。具体代码如下: if (HS...
  • POI读取Excel数据日期时间输出

    千次阅读 2017-07-06 11:37:42
    POI读取Excel单元格的数据,不同的数据类型有不同的读取方法,因此要读取数据必须先判断单元格的数据类型,POI定义了NUMERIC数值型,把日期时间也当作数值进行存储,所以我们读取时先判断为数值NUMERIC类型,再用...
  • [图片说明](https://img-ask.csdn.net/upload/202010/03/1601683016_873944.png)第一处是创建单元格式,第二处是在循环每个单元格的时候给获取单元格对应的颜色,最后一处是单元格设置类型的地方。 第二处单元格在...
  • 正确的处理方法是先判断单元格的类型是否则NUMERIC类型,然后再判断单元格是否为日期格式,如果是的话,创建一个日期格式,再将单元格的内容以这个日期格式显示出来。如果单元格不是日期格式,那么则直接得到NUMERIC...
  • POI获取Excel单元格的

    千次阅读 2017-03-15 15:41:24
    public String getCellValue(XSSFCell cell) { String value = ""; // 以下是判断数据的类型 switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: value = cell.getN
  • int [] field_arr ={0,1,6,7... //要合并的数据为那几列 for(int m =0;m <field_arr.length;m++){ int field = field_arr[m]; int begin =1; int end =1; int onId =0; int type =0; //根据类型判断的参数 ...
  • 数据类型、实际值与显示值、单元格支持操作单元格样式:行高列宽、隐藏行列、自动换行、上下标、文字竖排、大文本字段分页时断开、标识说明、格式刷单元格Web属性:web显示、web编辑风格、控件实际值与显示值、...
  • 常用“允许”类型解读:序列:最常用的的允许类型,并且可以为单元格提供待录入内容下拉选项。编辑来源有两种方法,手工输入或者选择数值区域。整数:控制单元格输入数值为整数,且符合预设条件和范围。小数:控制...
  • 当用户向工作表的单元格中输入内容的时候,Excel会自动对输入的数据类型进行判断。Excel可识别的数据类型有数值、日期或时间、文本、公式、错误值与逻辑值(本技巧不讨论此类数据)。进一步了解Excel所识别单元格内...
  • 日期格式的转换不管在哪里一直都是很大的问题,在Java中可以使用date类和sempleDateFormat还有(日历类)calendar来进行转化,而在Excel向数据库中传输时则有可以先判断单元格的数据类型然后在进行...
  • 当用户向工作表的单元格中输入内容的时候,Excel会自动对输入的数据类型进行判断。Excel可识别的数据类型有数值、日期或时间、文本、公式、错误值与逻辑值(本技巧不讨论此类数据)。进一步了解Excel所识别单元格内...
  • 在读excel日期时候,如果单元格格式设置为date,那么就要注意:这里要做一个判断,如果该单元格是一个double值, 那么就要用 DateTime.FromOADate(double.Parse(range.Value2.ToString()));方法获得时间; 如果...
  • 在做阿里天池的o2o消费者用券行为预测时,对于数据中的没有数据的值,其全部用“null"表示了。 将该数据导入到程序中,其全部显示为Nan。...该位置的数据类型,用isnull函数判断,为空值。 ...
  • 今天我们说的函数相信你一定不常用到,因为它们的作用是甄别的单元格的数据类型。我们在工作中编写的公式或实现某些功能,或多或少的都存在对数据类型的依赖,当不满条件的时候,通常返回一个Excel预制的错误代码,...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 191
精华内容 76
关键字:

判断单元格的数据类型