3

Я использую LibreOffice 5.0.5.2 в Docker-контейнере Ubuntu 15.10 для преобразования произвольных входящих файлов электронных таблиц в канонические файлы CSV:

/usr/lib/libreoffice/program/soffice.bin \
    --convert-to 'csv:Text - txt - csv (StarCalc):44,34,76,1,1/2/2/2/3/2,1031,true,false,true' \
    --outdir '/tmp/outgoing' \
    'incoming.csv'

Как я понимаю из документации, эта командная строка должна точно преобразовывать электронные таблицы в CSV, используя:

  • , Как разделитель полей ("44")
  • " в качестве символа вложения (" 34 ")
  • UTF-8 в качестве входящей кодировки ("76")
  • начать с первой строки в файле ("1")
  • отформатируйте столбцы 1, 2 и 3 как текст («1/2/2/2/3/2»),
  • использование UTF-8 имеет исходящую кодировку ("1031")
  • заключить в кавычки все текстовые ячейки ("true")
  • не обнаруживать специальные числа ("ложь")
  • сохранить содержимое ячейки, как показано ("true")

Это работает хорошо, за исключением столбцов, которые содержат определенный текст с начальными нулями. Например, если incoming.csv это:

"0123456789"

Полученный экспортированный файл выглядит так:

123456789

Насколько я понимаю, если столбец будет помечен как текст при импорте, он сохранит ведущие нули, а затем будет идти в другом направлении, пометка "процитировать все текстовые ячейки" при экспорте сохранит эти сохраненные нули. Но, похоже, это не относится к некоторому набору входных данных.

Например, они сохраняют свои ведущие нули, которые, как я предполагаю, состоят в том, что они содержат нечисловые символы:

  • 0x3E
  • 0 123 456

Используя командную строку, как я могу уговорить LibreOffice, чтобы сохранить ведущие нули во время экспорта?

1 ответ1

2

Наконец, я нашел три источника, которые помогают мне составить это:

  1. https://stackoverflow.com/a/30465397/2908724
  2. https://bugs.documentfoundation.org/show_bug.cgi?id=36313
  3. https://unix.stackexchange.com/a/259434/50240

В приведенной выше команде отсутствует --infilter , который инструктирует LibreOffice о настройках импорта . Флаг --convert-to указывает только параметры экспорта .

Эта команда полностью сохраняет лидирующие нули во всех тестовых случаях. Волшебство является терминалом true , что означает "заключить в кавычки все текстовые ячейки" и эквивалентно флажку с тем же именем в диалоге импорта.

/usr/lib/libreoffice/program/soffice.bin \
    --convert-to 'csv:Text - txt - csv (StarCalc):44,34,76,1' \
    --infilter='CSV:44,34,76,1,,1031,true' \
    --outdir '/tmp/outgoing' 'incoming.csv'

Как примечание, порядок аргументов имеет значение: --outdir должен следовать как --infilter и --convert-to .

Кроме того, кажется, что можно указать несколько --infilter , чтобы объявить конкретные комбинации и настройки, которые разрешены.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .