Чтение / анализ файла XLSX, сохранение шрифтов

Есть ли модуль / программа / метод Perl, который может изнутри Linux читать текст в файле XLSX с форматированием шрифтов?

Это не обязательно Perl, но Perl – это то, с чем я больше всего знаком, поэтому Perl будет лучше.

Например, одна ячейка может сказать:

King Kong – моя любимая книга. Мне нравится больше, чем в 1984 году .

Я прочитал кучу сообщений и загрузил кучу модулей и образцов perl, но все они просто извлекают текст. Я бы очень хотел сохранить форматирование.

Чтобы читать файлы XLSX, вам нужно будет справиться с Win32::OLE – это немного болезненный процесс, но это не невозможно.

Microsoft предоставляет пример кода: http://support.microsoft.com/kb/214797

Но на базовом уровне для чтения из электронной таблицы вам нужно что-то вроде:

 use strict; use warnings; use Data::Dumper; use Win32::OLE; use Win32::OLE::Const 'Microsoft Excel'; my $excelfile = 'Book1.xlsx'; my $Excel = Win32::OLE->new('Excel.Application'); my $Book = $Excel->Workbooks->Open($excelfile); my $Sheet = $Book->Worksheets("Sheet1"); print $Sheet->Range("a2")->{Value}, "\n"; my $cell = $Sheet->Range("a2"); foreach my $key ( keys %$cell ) { print "$key, ", $cell->{$key} ? $cell->{$key} : 0, "\n"; } 

Я думаю, вам понадобится:

 Font, Win32::OLE=HASH(0x1b2720c) 

Например:

 foreach my $key ( keys %{$cell->{Font}} ) { print "$key, ", $cell->{Font}->{$key} ? $cell->{Font}->{$key} : 0, "\n"; } 

Это скажет вам, выделена ли целая ячейка курсивом. (Или полужирный, или что-то еще). Я еще не выкопал элемент, который скажет вам, форматируются ли подстроки.

Edit: Нет, я не вижу никакого форматирования подсетей, но это явно можно сделать.

С дополнительными деталями – это Linux:

Win32::OLE не является опцией – это простой способ, так как он «автоматизирует» Excel (тот же механизм, что и VB).

Однако одно из преимуществ XLSX заключается в том, что это фактически формат архива на основе XML.

Так что-то вроде этого может работать:

 #!/usr/bin/perl use strict; use warnings; use Archive::Zip; use XML::Twig; my $archive = Archive::Zip -> new (); $archive -> read ( 'Book1.xlsx' ); my $thing = $archive -> memberNamed('xl/sharedStrings.xml'); print $thing -> contents(); my $parser = XML::Twig -> new( pretty_print => 'indented' ) -> parse ( $thing -> contents() ); $parser -> print; 

Теперь это немного грубо, потому что он просто сбрасывает XML. Я думаю, что форматирование имеет каждую ячейку в качестве элементов <si> .

Таким образом, вы можете:

 foreach my $element ( $parser -> root -> children('si') ) { print $element -> text,"\n"; } 
  • MaxRow возвращается как -1 при анализе xlsx в perl с использованием ParseXLSX
  • Удалить всю строку с помощью таблицы: ParseXLSX
  • Perl Excel :: Writer :: XLSX-> new ('myfile.xlsx') генерирует несоответствующую ошибку ввода-вывода в Windows 8 env
  • Не удается вызвать метод «add_worksheet» по неопределенному значению?
  • Excel для группировки
  • Perl Excel - не может вызывать значение метода для неопределенного значения. Удаление ячеек, когда текст является подстрокой другой ячейки
  • Что такое хороший анализатор CPAN для файлов HTML MS Excel?
  • Perl 'не может найти «рабочий лист» метода объекта через пакет «Электронная таблица :: ParseExcel :: Workbook»'
  • Как я могу объединить два файла Excel (xls) в Perl или пакет?
  • Ошибка чтения Excel
  • Определение типов дат в таблицах :: ParseExcel
  • Interesting Posts

    http получить ответ на скачивание файла excel

    «Удалить аргумент типа» при чтении из файла excel в java

    Добавлять данные в лист excel, если они созданы с использованием ClosedXML в c #

    Отображение двух дат в одной ячейке

    Excel csv (ms-dos) файл с разделителями-запятыми

    Развертывание служб Windows Microsoft.office.interop.excel нет доступа к файлам

    Как получить значение из вложенного / помещенного в Excel объекта Excel – данные из json

    Если значение совпадает с столбцом, верните строку

    Создание линейной диаграммы с разными значениями X

    Сопоставить столбец с электронной таблицей на SQL-сервер и данные дампа на ту же таблицу

    Параметр Excel в t / sql SELECT TOP xxx без использования SP

    Экземпляр Excel по-прежнему остается после вызова Marshal.FinalRelease в VB.NET

    Выпадающий список Excel заполняется с автоматическими значениями

    Преобразование значения Excel с кодовой страницы 1251 в unicode

    нечитаемая ошибка содержимого с apache POI 3.8

    Давайте будем гением компьютера.