Уважаемые форумчане! Долго искал решение проблемы: почему файл, выкачанный из 1с, в Excel 2010 работает абсолютно нормально, а при открытии в Excel 2016 сильно загружает процессор и вызывает зависание всех открытых файлов Excel. Сегодня на одном из форумов нашел решение, хотел поделиться, если кто-то не сделал это раньше меня: Решение проблемы между файлами 1с и Excel 2016
Реально бесит такая фигня с 1С. Выгружаешь файл, там всего один лист, делаешь какую-нить сводную, кладешь ее в новый лист, а к исходному листу после этого уже нет доступа. Приходится заходить в Параметры - Дополнительно и там ставить галочку в параметр "Показывать ярлыки листов", и только потом можно отодвинуть эту заслонку и получить доступ к листам!
Если автоматизировать бардак, то получится автоматизированный бардак.
А подошёл способ с форума Майкрософт по ссылке выше?
Цитата
Сегодня нашел косяк!!! Файл сформирован из 1С , листы снизу скрыты(задвинуды полосой пролистывания) - прокруткой и при этом тормозит при копировании, перескакивании по ячейкам. Как только отодвигаю эту задвижку и становятся видны листы, так перестают тормозть файлы!!!!
Проверил на 12 файлах, на 4х компьютерах!! Задвигаешь обратно (скрываешь листы, так сразу начинает тупить при копировании ячейки)
Из первого поста не вся картина ясна, есть несколько неизвестных:
1. Какая платформа 1С (7.7, 8.х) 2. Каким способом сохраняется файл из 1С?
Для v8:
Код
ТабДокумент.Записать(ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS);
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ПолноеИмяФайла);
Excel.Visible = 0;
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;
FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
//Excel.Visible = 1; // если нужно поработать дальше с книгой
//Excel.Application.Quit() // если просто выходим
Для v7:
Код
ТабДокумент.Записать(ПолноеИмяФайла, "XLS");
Excel = СоздатьОбъект("Excel.Application");
Excel.WorkBooks.Open(ПолноеИмяФайла);
Excel.Visible = 0;
Excel.ActiveWindow.DisplayWorkbookTabs = 1;
Excel.ActiveWindow.TabRatio = 0.6;
FullName = Excel.ActiveWorkbook.FullName;
Excel.DisplayAlerts = false;
Excel.ActiveWorkbook.SaveAs(FullName, 18); // 18 - xls 97-2003; 51 - xlsx 2007-2013
//Excel.Visible = 1; // если нужно поработать дальше с книгой
//Excel.Application.Quit() // если просто выходим
Цитата
wowick написал: 7.7 не знает такого формата, там только xls.
Знает, если сохранять не средствами платфомы 1С
Код
ТабличныйДокумент.Записать("c:\Отчет.xls", 1);
А как в примере выше - вызывая Excel.Application
Вот еще один способ, с созданием (копированием) листов в Excel:
Скрытый текст
Код
// Процедура копирует первый лист из книги ПутьИмяЛиста
// в книгу ПутьИмяКнигиОтчетов и присваивает этому листу имя НовоеИмяЛиста.
// Если книги ПутьИмяКнигиОтчетов еще нет - она создается
// Если в книге ПутьИмяКнигиОтчетов уже есть лист с именем НовоеИмяЛиста - он заменяется на новый
Процедура ПеренестиОтчетВКнигуExcel(ПутьИмяКнигиОтчетов, ПутьИмяЛиста, НовоеИмяЛиста,Ном) Экспорт
// Дотянуться до Экселя
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Предупреждение("У Вас на компьютере не установлен Microsoft Excel. Импорт невозможен!");
Возврат;
КонецПопытки;
// Сам Эксель невидимый
Эксель.Visible = 0;
// И лишних вопросов задавать не должен
Эксель.DisplayAlerts = 0;
// Получить книгу из параметра ПутьИмяКнигиОтчетов
Попытка
КнигаОтчетов = Эксель.Workbooks.Open(ПутьИмяКнигиОтчетов);
Исключение
КнигаОтчетов = Эксель.Workbooks.Add;
КнигаОтчетов.SaveAs(ПутьИмяКнигиОтчетов);
КонецПопытки;
// Получить книгу из параметра ПутьИмяЛиста
Попытка
ЛистОтчета = Эксель.Workbooks.Open(ПутьИмяЛиста);
Исключение
Предупреждение("Не найден файл "+ПутьИмяЛиста+"!");
Эксель = 0;
Возврат;
КонецПопытки;
// Попробовать удалить отчет НовоеИмяЛиста из книги, если он уже есть
Попытка
КнигаОтчетов.Worksheets(НовоеИмяЛиста).Delete();
Исключение
КонецПопытки;
// Скопировать лист из ЛистОтчета в КнигаОтчетов:
ЛистОтчета.Worksheets(1).Name = НовоеИмяЛиста;
ЛистОтчета.Worksheets(1).Copy(КнигаОтчетов.Worksheets(Ном));
ЛистОтчета.Close(0);
КнигаОтчетов.Save();
КнигаОтчетов.Close(-1);
Эксель = 0;
КонецПроцедуры