如何通过C#获取Excel单元格的预设格式
解答
使用Microsoft.Office.Interop.Excel库可以直接读取Excel单元格本身设置的格式,不需要依赖单元格存储值的类型判断。
核心读取方法
单元格的格式配置存储在Range对象的NumberFormat相关属性中,和单元格实际存储的值完全独立,读取示例代码如下:
using Excel = Microsoft.Office.Interop.Excel; // 读取指定工作表A1单元格的格式 Excel.Worksheet targetSheet = (Excel.Worksheet)currentWorkbook.Worksheets[1]; Excel.Range targetCell = targetSheet.Range["A1"]; // 获取单元格设置的格式字符串,和Excel单元格格式面板中显示的自定义格式内容完全一致 string rawFormatStr = targetCell.NumberFormat.ToString();
常见格式类型判断规则
拿到格式字符串后,可以直接匹配特征区分需要的格式类型:
- 文本格式:
rawFormatStr返回固定值@ - 日期格式:格式串包含
y(年)、m(月)、d(日)类日期占位符,常见返回值如yyyy/m/d、yyyy年m月d日 - 时间格式:格式串包含
h(时)、s(秒)、AM/PM类时间占位符,常见返回值如h:mm、hh:mm:ss - 货币格式:格式串包含货币符号占位符,常见返回值如
¥#,##0.00、$#,##0.00_);($#,##0.00),也可以读取NumberFormatLocal属性获取适配当前系统区域的本地格式串辅助判断 - 百分比格式:格式串包含
%占位符 - 普通数值格式:格式串仅包含
0、#、千分位分隔符,、小数点.这类数值占位符,无上述特殊类型标识
注意事项
- 不要通过
Range.Value、Range.Value2的返回值类型判断单元格格式:这两个属性返回的是单元格实际存储的底层值,比如设置为日期格式的单元格底层存储的是double类型的序列值,直接判断值类型只会识别为数值,无法拿到用户设置的展示格式 - 如果需要更稳定的判断逻辑,可以读取
NumberFormatIndex属性,该属性返回Excel内置标准格式的枚举索引,和内置格式枚举值比对即可,不需要手动解析格式字符串
内容的提问来源于stack exchange,提问作者Mateusz Klepacz
相关产品推荐
相关产品推荐

