Корректировка 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. Подумал, может кто тоже сталкивался с такой проблемой – тогда пригодится, или на какие другие полезные мысли наведет 🙂

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *