2010-01-07 2 views
1

В основном я хотел бы сохранить существующий формат ячейки Excel. Если я использую ActiveCell.Value2 = "новое значение";Сохранять форматирование в ячейке excel

ActiveCell отображает «новое значение», но теряет определяемое пользователем форматирование (например, красный шрифт, синий фон), все значения форматирования возвращаются к значениям формата Excel по умолчанию.

Примечание. Если вы замените значение ячейки с помощью Excel, Excel сохранит формат пользователя. При записи этого действия в качестве макроса Excel использует свойство FormulaR1C1, но в соответствии с MSDN это свойство используется для макросов.

ответ

2

Если я использую ActiveCell.Value2 = «новое значение» ActiveCell отображает «новое значение», но теряет определенный пользователь форматирование

Нет, это не так, я просто протестировал его (с Excel 2003). Открыт новый пустой документ, отформатированный столбец с некоторыми цветами и определенного пользователем числового форматом и и вошел

ActiveCell.Value2="1" 

в ближайшем окне редактора VBA. Существующий формат сохраняется. Поэтому, если у вас есть другой сценарий для решения проблемы (где формат теряется), пожалуйста, опишите его подробно.

EDIT: если такое поведение действительно отличается в 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

+0

Извините, я использую VSTO и C#, и я нашел это поведение раздражающим. Это решение не помогает, потому что мне нужно отображать отчет с несколькими строками и столбцами (100) –

+0

Вы были правы, значение2 не меняет форматирование, там был код range.clear, где-то в коде, который очищал содержимое и форматирование. –

0

Вы можете скопировать ячейку и «Вставить» форматирование обратно - http://www.ozgrid.com/forum/showthread.php?t=56324

+0

Я буду помнить об этой идее для другого запроса функции, который нужно сделать, спасибо за вашу помощь –

Смежные вопросы