gifts2017

Корректировка EXCEL–файла. Восстановление «длинных» строк.

Опубликовал Слава Кирлан (Ягг) в раздел Программирование - Практика программирования

Обработка предназначена для борьбы с обрезанием строк (не более 255 символов) при записи MXL-файла в EXCEL.

Преамбула.

При сохранение таблиц (формата MXL) из 1С в EXCEL часто наблюдается «обрезание» длинных строк (в ячейке MXL текст длиной скажем 300 символов, а в EXCEL уходит только 255). Наверно, есть много разных способов борьбы с этим злом, здесь представлен один из них.

Суть метода – сравнение текста в каждой ячейки таблицы 1С и соотвествующей ей ячейки файла EXCEL.

Обработка требует

- предварительного сохранения таблицы 1С в файл (на самом деле, мне прислали ряд таких файлов, и поставили задачу загнать все корректно в EXCEL – отсюда и подход реализации);

- наличие на компьютере установленного MS Office (так как используется OLE объект).

 

Работа с обработкой

На форме (рисунок 1) выбирается исходный MXL файл (поле «Входной файл») и окончательный фал EXCEL (поле «Выходной файл»).

Если файла EXCEL еще нет, то необходимо снять галочку «Не перезаписывать файл, а только обработать». В этом случае программа сама создаст EXCEL файл с указанным именем из файла MXL.

После выполнения корректировки EXCEL файла его можно или сразу записать, или открыть на просмотр (и потом уже если все в порядке записывать).

 

Реализация обработки.

На форме переманенные:

«ИмяВхФайла» - имя исходного MXL файла;

«ИмяВыхФайла» - имя конечного EXCEL файла;

«НеПерезаписывать» - галочка, решающая нужно ли предварительно создавать EXCEL файл из MXL;

«ЧтоДелатьСВыходным» - переключатель, определяет показать ли  предварительно выходной файл или сразу записывать.

 

Сам код модуля обработки (если интересно)

--------------------------------------------------------------

 

Процедура ПроверкаЯчеекЭКСЕЛ(Таб,ЛистЕ,ТипФайлаEXCEL)

           

            Если  ТипЗначенияСтр(ЛистЕ) <> "OLE._Worksheet" тогда

                        возврат;

            КонецЕсли;

               

            МаксСтрок = Таб.ВысотаТаблицы();

            Если МаксСтрок =0 Тогда

                возврат;            

            КонецЕсли;

           

            МаксКол = Таб.ШиринаТаблицы();

           

            для стр = 1 по МаксСтрок цикл

                        Если стр%25=0 тогда

                                   Состояние("Проверили "+Стр+" из "+МаксСтрок);

                        КонецЕсли;  

                       

                        для кол = 1 по МаксКол цикл

                                   Текст_ = Таб.Область(Стр,кол).Текст;

                                   ДлиннаСтр = стрДлина(Текст_);

                                  

                                   Если ПустаяСтрока(Текст_)=1 Тогда

                                               продолжить;   

                                              

                                   ИначеЕсли ДлиннаСтр

                                               // ошибка может быть только начиная с 242, но возьмем чуть меньще          

                                               продолжить;

                                   КонецЕсли;      

                       

                                   Ячейка = ЛистЕ.Cells(стр,кол);

                                   Ячейка.NumberFormat = "";

                                   Ячейка.Value = Текст_;

           

                                   ТипФайлаEXCEL =  -4143;

                                  

                        КонецЦикла;

            КонецЦикла;

                 

КонецПроцедуры    

 

Процедура Сформировать()

            Таб = СоздатьОбъект("Таблица");

            Таб.Открыть(ИмяВхФайла);

           

            ЕСли НеПерезаписывать=0 тогда

                        Таб.Записать(ИмяВыхФайла,1);

            КонецЕСли;

   

            ExcelApp = СоздатьОбъект("Excel.Application");

            НовыеРабочиеКниги          =ExcelApp.WorkBooks;

            РабочаяКнига           =НовыеРабочиеКниги.Add(ИмяВыхФайла);

           

            ТипФайлаEXCEL = 39;

            ПроверкаЯчеекЭКСЕЛ(Таб,ExcelApp.ActiveSheet,ТипФайлаEXCEL); 

            Если ЧтоДелатьСВыходным=1 Тогда

                        ExcelApp.ActiveWorkbook.SaveAs(ИмяВыхФайла,ТипФайлаEXCEL);         

                        выход=ExcelApp.ActiveWindow.Close;

                       

            иначеЕСли ЧтоДелатьСВыходным=2 Тогда      

                        ExcelApp.Visible = 1;           

            КонецЕсли;

КонецПроцедуры

 

Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога,ФлагСтандОбр)

    Если ИдентЭлемДиалога="ИмяВхФайла" Тогда

                        ИмяФайла = ИмяВхФайла;

                        Каталог  = "";

                       

                        Если ФС.ВыбратьФайл(0,ИмяФайла,Каталог,"Выберите файл","*.mxl|*.mxl","mxl")=1 Тогда

                             ИмяВхФайла = Каталог+ИмяФайла;                                                                     

                        КонецЕсли;

       

            ИначеЕсли ИдентЭлемДиалога="ИмяВыхФайла" Тогда         

                        ИмяФайла = ИмяВыхФайла;

                        Каталог  = "";

                       

                        Если ФС.ВыбратьФайл(1,ИмяФайла,Каталог,"Выберите файл","*.xls|*.xls","xls")=1 Тогда

                             ИмяВыхФайла = Каталог+ИмяФайла;                                                                    

                        КонецЕсли;              

    КонецЕсли;         

КонецПРоцедуры

 

ЧтоДелатьСВыходным = 1;

 

--------------------------------------------------------------

 

PS. Подумал, может кто тоже сталкивался с такой проблемой – тогда пригодится, или на какие другие полезные мысли наведет :)

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Обработка корректировки файлов
.ert 35,00Kb
13.07.12
10
.ert 35,00Kb 10 Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа