В одном из моих проектов для обмена достаточно большим объёмом данными между компьютером пользователя и WEB-приложением используется CSV-файл с следующими характеристиками:
Кодировка — UTF-8.
Разделитель поля — точка с запятой ( ; ).
Разделитель текста — пустая строка (ничего не используется).
Со всех сторон (и клиентской, и серверной) всё хорошо работает, но есть один пунктик, который очень сильно достаёт тех кто работает с файлом — каждый раз при открытии файла в OpenOffice.org 3 Calc (Электронные таблицы) постоянно запрашивается кодировка файла и разделители. Напрягает.
После обращения на несколько ресурсов с вопросом как это можно автоматизировать, меня совершенно справедливо отправили на форум компании ИнфраРесурс, и там почти сразу некий добрый человек smaharbA предложил простое и изысканное решение моего вопроса.
Я в начале думал, что OpenOffice.org 3 Calc нужно передать параметры кодировки и разделителей через командную строку, а оказалось это делается через макрос.
Для создания макроса откройте OpenOffice.org 3 Calc и выберите в меню Сервис — Макросы — Управление макросами — OpenOffice.org Basic…
В открывшемся окне выберите пункт Мои макросы — Standard и щёлкните на кнопке Создать, расположенной в правой колонке с кнопками.
В новом окне удалите все строки, кроме первой, и вставьте на их место следующий код:
Sub OpenCSV(f)
dim a(1) As new com.sun.star.beans.PropertyValue
a(0).Name = "FilterName"
a(0).Value = "Text - txt - csv (StarCalc)"
a(1).Name = "FilterFlags"
a(1).Value = "59,,76"
StarDesktop.LoadComponentFromURL(ConvertToURL(f), "_blank", 0, a )
End Sub
В строке «a(1).Value = «59,,76»» «59» означает символ точка с запятой, а «76» кодировку — UTF8. Так что если у вас другая кодировка CSV файла или другие разделители, то цифры будут другие. (Спрашивать какие цифры подходят вам нужно не здесь, а в теме, где получил ответ я)
В результате у вас должно получиться что-то типа этого:
Теперь макрос создан, пора создать скрипт, который бы открывал файл.
В Linux он может иметь любое название, главное не забыть сделать файл исполняемым. Содержимое файла:
soffice -calc "macro:///Standard.Module1.OpenCSV(/home/serg/tmp/test.csv)"
Вместо /home/serg/tmp/test.csv нужно подставить свой полный путь к файлу.
В Windows нужно сначала создать текстовый файл (.txt). Записать в него:
start soffice -calc "macro:///Standard.Module1.OpenCSV(c:\test.csv)"
Вместо c:\test.csv нужно указать полный путь до файла CSV, а этот текстовый файл переименовать в файл с расширением .bat.
Теперь при двойном щелчке на этот файл будет автоматически открываться OpenOffice.org 3 Calc, а в нём готовый для работы CSV файл.
И на последок, ещё раз хотелось бы выразить благодарность г-ну smaharbA за помощь.