NPOIDataFormat我正在使用NPOIv1.2.3导出网格,但无法使单元格格式正常工作。我有一个将对象列表导出到XLS文件的类。为每个对象创建一行并为每个配置的属性添加一个单元格。可以在每个属性级别设置单元格数据格式。我读过你不应该为每个单元格创建一个新样式。我不能对我的样式进行硬编码,因为我的导出器需要支持任何类。相反,我编写了一个小缓存系统,如果尚未为当前单元格格式创建新的CellStyle,它只会创建一个新的CellStyle。不幸的是,这仍然没有解决问题。在最终的XLS文件中未正确应用格式。在我的测试用例中,XLS中的大多数单元格都使用“日期”格式,即使只有几列是日期。但是,第一列正确使用了自定义格式。没有单元格设置为文本,即使它应该是大多数单元格。我究竟做错了什么?代码下面的“AddRecords”方法用于添加数据行(页眉和页脚行分别添加)。最后一段代码是延迟加载CellStyles的方法。privatevoidAddRecords(Sheetsheet,IListrecords){foreach(varrecordinrecords){//附加行varrow=sheet.CreateRow(sheet.LastRowNum+1);//遍历所有配置的列//从记录对象中获取列的属性值value=GetCellValue(column,record);//采用对象值并调用适当的特定于类型的SetCellValue重载的扩展方法cell.SetCellValue(value);//从列定义中获取格式(“m/d”、“##.###”等),或使用默认字符串dataFormat=column.DataFormat??GetDefaultDataFormat(值);//查找/创建单元格样式cell.CellStyle=GetCellStyleForFormat(sheet.Workbook,dataFormat);}}}//////根据值的对象类型返回默认格式字符串。//////http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/BuiltinFormats.html/////////privatestringGetDefaultDataFormat(objectvalue){if(value==null){return"General";}如果(值为DateTime){返回“m/d”;}if(值为bool){return"[=0]"Yes";[=1]"No"";}if(值为byte||值为ushort||值为short||值为uint||值为int||值为ulong||值为long){return"0";}如果(值是浮点数||值是双精度值){返回“0.00”;}//字符串和其他任何东西都应该是文本return"text";}privatereadonlyDictionary_cellStyleCache=newDictionary();privateCellStyleGetCellStyleForFormat(Workbookworkbook,stringdataFormat){if(!_cellStyleCache.ContainsKey(dataFormat)){varnewDataFormat=workbook.CreateDataFormat();varstyle=workbook.CreateCellStyle();style.DataFormat=newDataFormat.GetFormat(数据格式);_cellStyleCache[数据格式]=样式;}返回_cellStyleCache[dataFormat];}看起这个问题与创建与内部设置格式配对的新格式相关我更改了我的延迟加载方法以使用内置格式(如果可用),并且我最终XLS中的单元格格式现在都是正确的。以上就是C#学习教程:NPOIDataFormat分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注—if(!_cellStyleCache.ContainsKey(dataFormat)){varstyle=workbook.创建单元格样式();//检查这是否是内置格式varbuiltinFormatId=HSSFDataFormat.GetBuiltinFormat(dataFormat);if(builtinFormatId!=-1){style.DataFormat=builtinFormatId;}else{//不是内置格式,所以创建一个新格式varnewDataFormat=workbook.CreateDataFormat();style.DataFormat=newDataFormat.GetFormat(数据格式);}_cellStyleCache[dataFormat]=样式;}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
