在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 

(但要小心,这是'空中密码')。

+0

我认为这个问题只发生在使用Excel通过C# - 在VBA中它工作正常。 (这个问题被标记为C#和VSTO,但实际上没有提到它在这个问题:0) – ScottF 2010-01-07 07:19:19

+0

对不起,我正在使用VSTO和C#,我发现这种行为很烦人。 此解决方案没有帮助,因为我需要呈现多行和多列(100秒)的报告 – 2010-01-07 22:13:07

+0

您是对的,value2不会更改格式,在清除内容和格式的代码中存在range.clear调用。 – 2010-01-08 03:45:47

您可能想要复制的单元和“粘贴”格式化回 - http://www.ozgrid.com/forum/showthread.php?t=56324

+0

我会牢记这个想法,为另一个功能要求,我需要做的,谢谢你的帮助 – 2010-01-08 03:46:26