IE 2017

Определение формата ячейки Excel из 1С

Обмен - Загрузка и выгрузка в Excel

Перенося данные из таблиц Эксель в 1С, я заметил что некоторые ячейки с содержимым вида "50*10" в 1С переносятся не в таком же виде, а просто, например, цифрой 50. Все дело в формате ячейки!

Возможно, я изобретаю велосипед, но в свое время четкого ответа по этой теме не нашел. Вот и собрал всю полученную информацию в кучу и вываливаю её на ваш справедливый суд.

Итак, я опишу как получить формат ячейки и что с ним сделать, чтобы получить нормальное значение, например "50*10,0"=500

Эксель = СоздатьОбъект("Excel.Application");
Книга = Эксель.Workbooks;
Книга.Open("ИмяФайла");
Лист = 1;
НужныйЛист = Эксель.Sheets(Лист);
Стр = 1; Столб = 1;
Форм = СокрЛП(НужныйЛист.Cells(Стр,Столб).NumberFormat);
Значение = СокрЛП(НужныйЛист.Cells(Стр,Столб).Тext);
Значение = Число(Значение);
Книга.Close();
//Наш формат получается в виде - "*10,0" удаляем лишние символы и меняем запятую на точку (как принято в 1С)
Форм = СтрЗаменить(Форм,",",".");
Форм = СтрЗаменить(Форм,Симв(34),""); //Тут удяляем кавычки
Форм = СтрЗаменить(Форм,"*","");
Форм = Число(Форм);
Итого = Форм * Значение;

Все!

См. также

Комментарии
1. nelse (nelse) 26.01.12 00:02 Сейчас в теме
А Вы сами это пробовали?
Насколько я знаю, может и не прав, но такая конструкция
"Эксель = СоздатьОбъект("Excel.Application");"
в 7.7 просто не работает, т.к. в ней требуется английское написание "создать объект".
Да и такое: "Значение = СокрЛП(НужныйЛист.Cells(Стр,Столб).Тext);"
а потом: "Форм = Число(Форм);"
и дальше: :Итого = Форм * Значение;"...?
Зачем число умножать на строку?
2. Иван Гредасов (griff19) 14 26.01.12 08:39 Сейчас в теме
Подправил.
Все уже несколько месяцев работает замечательно...
3. Ivan Migov (navi) 10.02.12 13:04 Сейчас в теме
Немного не по теме, вы случаем не знаете как из 1с в Эксэле задавать параметры ячейки (цвет, фон, линии, формула.... итп) просто переодически надо и нигде не нахожу, вот и решил спросить
4. Иван Гредасов (griff19) 14 11.02.12 19:02 Сейчас в теме
5. Иван Гредасов (griff19) 14 11.02.12 19:45 Сейчас в теме
Я, например вот какую штуку набросал - записывает в первую ячейку таблицы данные и сохраняет:
Попытка 
    Эксель=СоздатьОбъект("Excel.Application");
Исключение 
    Предупреждение("Excel на компьютере не установлен!"); 
    Возврат; 
КонецПопытки;
Книга=Эксель.Workbooks.Add();
Лист = Эксель.Sheets(1);
Лист.Cells(1,1).Value="333";
Эксель.DisplayAlerts = 0; //Если файл существует - перезаписываем
Лист.SaveAs("D:\Excel.xlsx");
Книга.Close();
Эксель.Quit();
...Показать Скрыть
6. Ivan Migov (navi) 13.02.12 13:44 Сейчас в теме
Сп(4) griff19, Большое спасибо.
7. Эльвира (egoel) 28.02.12 09:39 Сейчас в теме
Спасибо, познавательно.
Оставьте свое сообщение