在Excel单元格上保留格式
基本上我想保留Excel单元格的现有格式。 如果我使用 ActiveCell.Value2 =“新值”;在Excel单元格上保留格式
ActiveCell显示“新值”但失去用户定义的格式(例如红色字体,蓝色背景),所有格式化值都会返回到Excel默认格式值。
注意:如果使用Excel替换单元格值,则Excel将保留用户的格式。 将此操作记录为宏时,Excel使用属性FormulaR1C1,但根据MSDN,此属性用于宏。
如果我使用ActiveCell.Value2 =“新价值” 的ActiveCell显示“新价值”,但失去用户定义的格式化
不,它没有,我只是测试它(与Excel 2003)。打开一个新的空文件,格式与一些颜色和用户自定义数字格式一列,并在VBA编辑器的立即窗口中输入
ActiveCell.Value2="1"
。现有的格式保持不变。所以,如果你有另一个场景来处理(格式丢失的地方),请详细描述它。
编辑:如果这种行为是在VSTO确实不同,作为一种解决方法,你可以尝试改变值之前保存ActiveCell有关格式的信息,例如
fci = ActiveCell.Range.Font.ColorIndex
ici = ActiveCell.Range.Interior.ColorIndex
pat = ActiveCell.Range.Interior.Pattern
nf = ActiveCell.Range.NumberFormat
然后更改值
ActiveCell.Value2 = "new value"
事后重新分配的格式信息再次
ActiveCell.Range.Font.ColorIndex = fci
ActiveCell.Range.Interior.ColorIndex = ici
ActiveCell.Range.Interior.Pattern = pat
ActiveCell.Range.NumberFormat = nf
(但要小心,这是'空中密码')。
您可能想要复制的单元和“粘贴”格式化回 - http://www.ozgrid.com/forum/showthread.php?t=56324
我会牢记这个想法,为另一个功能要求,我需要做的,谢谢你的帮助 – 2010-01-08 03:46:26
我认为这个问题只发生在使用Excel通过C# - 在VBA中它工作正常。 (这个问题被标记为C#和VSTO,但实际上没有提到它在这个问题:0) – ScottF 2010-01-07 07:19:19
对不起,我正在使用VSTO和C#,我发现这种行为很烦人。 此解决方案没有帮助,因为我需要呈现多行和多列(100秒)的报告 – 2010-01-07 22:13:07
您是对的,value2不会更改格式,在清除内容和格式的代码中存在range.clear调用。 – 2010-01-08 03:45:47