以下参考:https://www.e-learn.cn/topic/641548
IDataFormat dataformat = myworkbook.CreateDataFormat();
ICellStyle style0 = myworkbook.CreateCellStyle();
style0.DataFormat = dataformat.GetFormat("[DbNum2][$-804]General");//转化为汉字大写
ICellStyle style1 = myworkbook.CreateCellStyle();
style1.DataFormat = dataformat.GetFormat("0.0"); //改变小数精度【小数点后有几个0表示精确到小数点后几位】
ICellStyle style2 = myworkbook.CreateCellStyle();
style2.DataFormat = dataformat.GetFormat("#,##0.0");//分段添加,号
ICellStyle style3 = myworkbook.CreateCellStyle();
style3.DataFormat = dataformat.GetFormat("0.00E+00");//科学计数法
ICellStyle style4 = myworkbook.CreateCellStyle();
style4.DataFormat = dataformat.GetFormat("0.00;[Red]-0.00");//正数与负数的区分
ICellStyle style5 = myworkbook.CreateCellStyle();
style5.DataFormat = dataformat.GetFormat("# ??/??");//整数部分+分数
ICellStyle style6 = myworkbook.CreateCellStyle();
style6.DataFormat = dataformat.GetFormat("??/??");//分数
ICellStyle style7 = myworkbook.CreateCellStyle();
style7.DataFormat = dataformat.GetFormat("0.00%");//百分数【小数点后有几个0表示精确到显示小数点后几位】
hStyleGrid_Three.DataFormat = format.GetFormat(“0.000”);
得到的结果是:(自定义类型)
后来,研究了好久,才发现原来是格式错了,不能这么写 format.GetFormat(“0.000”);需要这样写:format.GetFormat(“0.000_);[Red]0.000
hStyleGrid_Three.DataFormat = format.GetFormat(“0.000_);[Red]0.000
修改后,NOPI生成的Excel的字段为:数值型了,如下图: 数字类型
但是只是修改数据单元格类型还是不可以实现值得导出求和,所以需要把数据类型直接放到cell内
根据:
void SetCellValue(bool value);
void SetCellValue(string value);
void SetCellValue(IRichTextString value);
void SetCellValue(DateTime value);
void SetCellValue(double value);
我的代码:根据类型放入不一样的值:
switch (valueType)
{
case "System.Decimal":
//str = Convert.ToString(Math.Round(Convert.ToDecimal(itemRow.Cells[itemColumn.Index].Value), 2));
Double DB = (double)Math.Round(Convert.ToDecimal(itemRow.Cells[itemColumn.Index].Value), 2);
cellStyle2.DataFormat = dataformat.GetFormat("0.00_");
cell1.SetCellValue(DB);
//cell1.SetCellValue(str);
break;
case "System.Double":
//str = Convert.ToString(Math.Round(Convert.ToDouble(itemRow.Cells[itemColumn.Index].Value), 2));
Double DBD = (double)Math.Round(Convert.ToDecimal(itemRow.Cells[itemColumn.Index].Value), 2);
cellStyle2.DataFormat = dataformat.GetFormat("0.00_");
cell1.SetCellValue(DBD);
break;
case "System.DateTime":
str = Convert.ToDateTime(itemRow.Cells[itemColumn.Index].Value).ToString("yyyy-MM-dd");// HH:mm:ss");
cell1.SetCellValue(str);
break;
case "System.Int32":
Double DBInt = (double)Math.Round(Convert.ToDecimal(itemRow.Cells[itemColumn.Index].Value), 2);
cellStyle2.DataFormat = dataformat.GetFormat("0.00_");
cell1.SetCellValue(DBInt);
//cell1.SetCellValue(str);
break;
default:
str = Convert.ToString(itemRow.Cells[itemColumn.Index].Value ?? "");
//cell1.SetCellValue(str.ToString());
cell1.SetCellValue(str);
break;
}
差别立即不同