|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
Преобразование Ods в DocX
Задача:
множество десятков файлов в формате Ods (в книгах только один лист) преобразовать в формат DocX Идея: Чтобы не изучать внутреннее устройство форматов использовать OLE и установленный MSOffice 2016 Решение: (частично работает) Код:
... MyExcel.WorkBooks[1].WorkSheets[1].Cells.Select; //выделяем все ячейки MyExcel.Selection.Copy; //копируем MyWord.Documents.Add; //создаем документ Word MyWord.Selection.Paste; //вставляем ранее выделенное MyWord.ActiveDocument.SaveAs(CrDir+'\'+searchresult.Name+'.docx');//сохраняем в формате docx ... Проблемы: 1. На тестовом файле работает на реальных зависает 2. В ячейках таблицы полученной в DocX длинные цифры не помещаясь записаны в две строки, а таблица может выйти за границы листа (в исходном ods такого нет) Выявлено: при использовании UsedRange.Rows.Count на реальных файлах выдается что используется порядка 80000 строк, хотя строк с данными от 25 до 200. процесс Word при выполнении кода использует до 1,5 Гб памяти и долгое ожидание не дает результата использование UsedRange.ClearFormats помогает избавиться от пустых ячеек и преобразование происходит однако вид таблиц в DocX становится совсем не читаемым Эксперимент: При сохранении файлов ods из Excel в формате pdf , открытие его в Word и новом сохранении в формате DocX дает прекрасные файлы с хорошо читаемыми таблицами и возможностью их редактировать Решено сделать так ods->pdf->docx Решение: (костыль! пока отлично работает) Код:
... MyExcel.Workbooks.Open(CrDir+'\'+searchresult.Name);// открываем файл ods MyExcel.DisplayAlerts:=False; //отключаем предупреждения Excel MyWord.DisplayAlerts:=False; //отключаем предупреждения Word MyExcel.WorkBooks[1].ExportAsFixedFormat(0, CrDir+'\'+searchresult.Name+'.pdf', EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam); //сохраняем из Excel в pdf формате MyWord.Documents.Open(CrDir+'\'+searchresult.Name+'.pdf');// открываем сохранение pdf в Word MyWord.ActiveDocument.SaveAs(CrDir+'\'+searchresult.Name+'.docx');// сохраняем в docx ... Вопросы: 1. Как избавится от пустых строк которые считаются используемыми 2. Есть ли идея другого варианта преобразования 3. Даже при MyWord.DisplayAlerts:=False; выдавалось окно с предупреждением при сохранении, текст окна не помню так как нажал -больше не показывать- может кто знает как его отключить без участия пользователя |