Требуется: Заполнить готовую книгу Excel с кучей формул и форматированием из 1С.
Решение: Просматриваем из 1С все листы, и в ячейки с примечаниями (комментариями) записываем результат формулы, указанные в этих же ячейках.
Т.е. нашли ячейку с примечанием - прочитали в ней выражение, вычислили с помощью 1С, и записали обратно в ячейку.
Перебор ячеек с примечаниями - только чтобы ускорить просмотр книги, не перебирать все ячейки в ней.
Идея: http://infostart.ru/public/16466/
Текст примера под катом, функция ЗначениеПоказателя() и переменная ФайлШаблона - в фрагменте не описаны.
//
Excel = СоздатьОбъект("Excel.Application");
Excel.Visible = 1;
Excel.DisplayAlerts = 0;
Д = Excel.Workbooks.Add(ФайлШаблона);
Для К=1 по Д.Sheets.Count Цикл
Л = Д.Sheets(К); // текущий лист
ВсегоКомментариев = Л.Comments.Count; // комментариев на листе
Для сч = 1 По ВсегоКомментариев Цикл
Состояние("Заполнение "+Л.Name+" "+Цел(100-сч/ВсегоКомментариев*100)+"%");
// текст коментария, в книге только служебные
Стр = Л.Comments(сч).Text();
// прочитаем ячейку
ИмяПоказателя = СокрЛП(Л.Comments(сч).Parent.Value);
// и сразу запишем в нее результа
Л.Comments(сч).Parent.Value = ЗначениеПоказателя(ИмяПоказателя);
КонецЦикла; // по комментариям
КонецЦикла; // по листам
ИмяФайла = ""+Формат(РабочаяДата(),"DГГГГММДД")+"_"+_шаблон+".xlsx";
Д.SaveAs(СокрЛП(Константа.КаталогЭкспортаДанных)+"\"+ИмяФайла);
// удалим все комментарии в результирующем файле, чтобы не мешали
Для К=1 по Д.Sheets.Count Цикл
Л = Д.Sheets(К); // текущий лист
КвоКомментариев = Л.Comments.Count; // комментариев на листе
Пока КвоКомментариев>0 Цикл
Л.Comments(КвоКомментариев).Delete();
КвоКомментариев=КвоКомментариев-1;
КонецЦикла; // по комментариям
КонецЦикла; // по листам
// если раскомментировать - Excel будет закрываться после заполнения и записи
//Excel.Application.Quit();
//Excel = 0;
Решение: Просматриваем из 1С все листы, и в ячейки с примечаниями (комментариями) записываем результат формулы, указанные в этих же ячейках.
Т.е. нашли ячейку с примечанием - прочитали в ней выражение, вычислили с помощью 1С, и записали обратно в ячейку.
Перебор ячеек с примечаниями - только чтобы ускорить просмотр книги, не перебирать все ячейки в ней.
Идея: http://infostart.ru/public/16466/
Текст примера под катом, функция ЗначениеПоказателя() и переменная ФайлШаблона - в фрагменте не описаны.
//
Excel = СоздатьОбъект("Excel.Application");
Excel.Visible = 1;
Excel.DisplayAlerts = 0;
Д = Excel.Workbooks.Add(ФайлШаблона);
Для К=1 по Д.Sheets.Count Цикл
Л = Д.Sheets(К); // текущий лист
ВсегоКомментариев = Л.Comments.Count; // комментариев на листе
Для сч = 1 По ВсегоКомментариев Цикл
Состояние("Заполнение "+Л.Name+" "+Цел(100-сч/ВсегоКомментариев*100)+"%");
// текст коментария, в книге только служебные
Стр = Л.Comments(сч).Text();
// прочитаем ячейку
ИмяПоказателя = СокрЛП(Л.Comments(сч).Parent.Value);
// и сразу запишем в нее результа
Л.Comments(сч).Parent.Value = ЗначениеПоказателя(ИмяПоказателя);
КонецЦикла; // по комментариям
КонецЦикла; // по листам
ИмяФайла = ""+Формат(РабочаяДата(),"DГГГГММДД")+"_"+_шаблон+".xlsx";
Д.SaveAs(СокрЛП(Константа.КаталогЭкспортаДанных)+"\"+ИмяФайла);
// удалим все комментарии в результирующем файле, чтобы не мешали
Для К=1 по Д.Sheets.Count Цикл
Л = Д.Sheets(К); // текущий лист
КвоКомментариев = Л.Comments.Count; // комментариев на листе
Пока КвоКомментариев>0 Цикл
Л.Comments(КвоКомментариев).Delete();
КвоКомментариев=КвоКомментариев-1;
КонецЦикла; // по комментариям
КонецЦикла; // по листам
// если раскомментировать - Excel будет закрываться после заполнения и записи
//Excel.Application.Quit();
//Excel = 0;
Комментариев нет:
Отправить комментарий