在现有文档中编辑 Range NumberFormat
Posted
技术标签:
【中文标题】在现有文档中编辑 Range NumberFormat【英文标题】:Edit Range NumberFormat in existing document 【发布时间】:2012-10-25 09:01:09 【问题描述】:我无法更改现有 Excel 文档 (xlsx) 中的列格式。列内容实际上是数字,但显示为文本,因此出现绿色三角形,告诉单元格显示为文本。
所以我在 C# 应用程序中打开此文档并执行以下操作:
sheet_.Range[sheet_.Cells[1, 2], sheet_.Cells[rowNum, 2]].EntireColumn.NumberFormat = "0";
但它不会更改列以将内容显示为数字(它们保持左侧对齐)
【问题讨论】:
【参考方案1】:我知道这是一篇旧帖子,但我一直在处理同样的问题。我收到的 .xlsx 文件已经有表示“数字为文本”错误的绿色三角形。我找不到以编程方式运行 Excel 错误检查命令“转换为数字”的方法,您可以通过单击 Excel 来执行此操作,并且更改具有这些错误的单元格上的 NumberFormat 对我不起作用,但我能够使用 TextToColumns 方法“刷新”单元格格式。
int lastCol = sheet.UsedRange.Columns.Count;
if(lastCol > 1)
for (int i = 1; i <= lastCol; i++)
sheet.Columns[i].TextToColumns(Type.Missing, XlTextParsingType.xlDelimited, XlTextQualifier.xlTextQualifierNone);
然后您可以从那里更改 NumberFormat。我碰巧有长整数被放入科学记数法中,所以我用它再次使它们成为常规整数:
sheet.Cells.NumberFormat = "#";
(PS,如果有人找到有关用于自定义 NumberFormats 符号的权威指南,我仍在努力寻找!)
【讨论】:
+1 这太好了,我在所有列上都使用了它,然后相应地应用了自定义宽度和数字格式【参考方案2】:尝试通过 get_Range 方法获取单元格值!例如,对于您想要的数字格式,假设您的 excel 单元格中有这个数字:1546,65
sheet_.get_Range("P10", "Q10").NumberFormat = "0"; // returns 1546
sheet_.get_Range("P10", "Q10").NumberFormat = "0,00"; // returns 1546,65
sheet_.get_Range("P10", "Q10").NumberFormat = "#.##0,00"; // returns 1.546,65
您可以使用这些数字格式!
希望对你有帮助
【讨论】:
【参考方案3】:我没有找到这个问题的理想解决方案,结果如下:
sheet_.get_Range("A1", "A100").NumberFormat = "0";
for(int i = 1; i <= 100; i++)
sheet_.Cells[1, i].Value = sheet_.Cells[1, i].Value;
【讨论】:
这对我的用例来说非常慢。 @Grinfish 的回答几乎是即时的。【参考方案4】:我知道这是一篇旧帖子,但我偶然发现了这个并有一个解决方案。您是否尝试过不分配任何 NumberFormat?默认情况下,excel 根据单元格内容决定,因此如果您有存储为文本的数字,则不会出现绿色三角形。如果您想根据数据类型读取值,请参考这篇文章
http://www.codeproject.com/Articles/335589/Export-Multiple-Datasets-to-Multiple-Excel-sheets
【讨论】:
【参考方案5】:对我来说,使用 Style 和 NumberFormatLocal 解决了这个问题:
sheet_.get_Range("A1", "A100").Style.NumberFormatLocal = "0";
【讨论】:
以上是关于在现有文档中编辑 Range NumberFormat的主要内容,如果未能解决你的问题,请参考以下文章
用于操作/编辑现有 xml 文档的最佳 java Xml 解析器
例外:在对象 SpreadsheetApp.Range 上获取方法或属性 setNumberFormats 时出现意外错误 - 现有答案对我没有帮助