Есть программа, которая генерирует документы EXCEL через COM, но сам EXCEL находится на удалённом компьютере в локальной сети.
Генерация заключается в выполнении поиска в шаблоне документа тегов и их замене на числа (#tag# -> 123456,00). В ячейках установлен нужный мне формат числа (123 456,00). Замена происходит вызовом Excel функции Replace у объекта Range
r.Replace("#tag#", "123456,00")
На самом деле все вызовы происходят динамически, т.е. PIA от Microsoft не подключаются.
Если я генерирую со своего компьютера, то всё нормально и я получаю в ячейке: 123 456,00.
А если с пользователь с других (пробовал на двух) — то числа в ячейках сохраняются как текст (123456,00), а на как число, о чём сигнализирует зелёный треугольничек в левом верхнем углу ячейки.
При этом формат в ячейке не сбрасывается. Далее если на этой ячейки нажать F2, а затем Enter, то текст превращается в число в требуемом формате.
Поставил виртуальную машину с Excel — то же всё OK
В чём проблема?
А>А>r.Replace("#tag#", "123456,00")
А>
Дело в том, что разделитель целой и дробной части числа в Excel зависит от настройки самого Excel и регирнальных настоек Windows:
If Application.UseSystemSeparators Then
r.Replace("#tag#", "123456" & <РазделительЦелойИДробнойЧастиКоторыйНастроенВWindows> & "00")
Else
r.Replace("#tag#", "123456" & Application.DecimalSeparator & "00")
End If
Здравствуйте, Аноним, Вы писали:
А>>А>>r.Replace("#tag#", "123456,00")
А>>
А>Дело в том, что разделитель целой и дробной части числа в Excel зависит от настройки самого Excel и регирнальных настоек Windows:
А>А>If Application.UseSystemSeparators Then
А> r.Replace("#tag#", "123456" & <РазделительЦелойИДробнойЧастиКоторыйНастроенВWindows> & "00")
А>Else
А> r.Replace("#tag#", "123456" & Application.DecimalSeparator & "00")
А>End If
А>
Региональные настройки Windows и Excel на компьютерах одинаковые.
Здравствуйте, Аноним, Вы писали:
А>Генерация заключается в выполнении поиска в шаблоне документа тегов и их замене на числа (#tag# -> 123456,00). В ячейках установлен нужный мне формат числа (123 456,00). Замена происходит вызовом Excel функции Replace у объекта Range
А>А>r.Replace("#tag#", "123456,00")
А>
Ищи ручками ячейки с "#tag#", пробегая по коллекции которую возвращает Worksheet.UsedRange(), и заменяй им значения так r.Value = 123456. Не знаю как на шарпе этот код должен выглядеть, так что в общих чертах только могу объяснить.
PS: А самый лучший способ — именованные диапазоны.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков