LINUX.ORG.RU

Выбор языка под задачу: редактирование xls(x) и ods


1

1

Доброго времени суток

Сабж. У моего любимого perl есть модуль, который создаёт xls, но не правит существующий, а работа с ods и вовсе через универсальный интерфейс.

Что в плане создания и редактирования электронных таблиц у python и ruby, например?

Интересуют высокоуровневые интерпретируемые ( а не компилируемые ) языки. Для linux, разумеется. Смену пола, ориентации и операционной системы не предлагать. Тем более что powershell вечный тормоз.

★★★★★

Последнее исправление: router (всего исправлений: 2)

зачем тебе все это, если перл - няшка?

registrant ★★★★★
()

Здесь рулят не языки, а библиотеки.

alienclaster ★★★
()

Интересуют высокоуровневые интерпретируемые ( а не компилируемые ) языки.

Справедливости ради, интерпретируется сейчас bash, а Perl и Python сначала компилируются в некоторое внутреннее представление кода, а потом выполняются.

AITap ★★★★★
()

Насколько потребные электронные таблицы выходят за пределы возможностей CSV?

Единственная предложенная в треде библиотека (для ruby) формул, насколько я понимаю, не умеет. Если нужно более-менее CSV — то есть предложение использовать любой преобразователь xls<->csv (если нет нормальных, то пойдет даже libreoffice/softmaker/etc.), а сам CSV править на своем любимом языке как хочется.

anonymous
()
Ответ на: комментарий от anonymous

Насколько потребные электронные таблицы выходят за пределы возможностей CSV?

Например автофильтры, цвета и границы ячеек, формулы, объединение ячеек

использовать любой преобразователь xls<->csv

Вариант интересный, посмотрю обязательно. Може и не нужны все эти автофильтры, или их делать после на powershell

router ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Возьмите стандартный бланк в xls, например, фактурку и переведите в csv. Что останется от бланка?

Deleted
()
Ответ на: комментарий от Deleted

Ну я к счастью не программист и тем более не программист 1с. csv - вариант интересный

router ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Что останется от бланка?

Ничего не останется.

ТСу, правда, ничего такого и не надо особенно, но я проблемы с бланками решал в свое время костыльно и влоб: пусть есть какой-нибудь жутко сложный бланк, куда нам надо записать свои данные (ну, допустим, распечатать именные сертификаты «заслуги в тредах с нацполом»).

Первый шаг — получить этот бланк в каком-нибудь удобочитаемом виде. По моему опыту, OOXML и ODF — совершенно одинаковый отстой для наших целей, так что сойдет и xlsx, и odp.

Дальше мы делаем на документ unzip и получаем кучу всякого барахла, среди которого есть xml с содержимым.

Теперь, опять же, в зависимости от индивидуальных предпочтений можно либо воспользоваться любой библиотекой для работы с XML в вашем любимом языке, либо с криком «йуниксвей наше фсио» сделать xml2 | sed | 2xml.

Затем запаковать обратно.

(Тут в треде могут появиться здоровые люди и сказать, что для такого во всех офисных программах есть функция «mail merge», но мы на них внимания обращать не будем).

anonymous
()

под python есть xlwt, только больше не развивается

fluorite ★★★★★
()
Ответ на: комментарий от anonymous

Единственная предложенная в треде библиотека (для ruby) формул, насколько я понимаю, не умеет.

Что надо ТСу не известно, а меня заказчик попросил заполнять расчитанными данными его заранее оформленный xls. Я в нужные ячейки его екселя записал ключи типа %VAR1% , %VAR2% ... и в руби-скрипте просто заменяю их на значения

упрощенно так

#!/usr/bin/ruby

require 'spreadsheet'

params = Hash.new;

File.open("tech_data.txt").each {|line|
    arr = line.split(',',4)
    key = arr[2]
    if ! key.empty? && key =~ /^%.*%$/ then
        params[key] = arr[3].chomp
    end
}

Spreadsheet.client_encoding = 'UTF-8'
book = Spreadsheet.open 'report_base.xls'
sheet = book.worksheet 0
sheet.each do |row|
    row.each_index do |idx|
        cell = row[idx]
        if cell =~ /^%.*%$/ then
            row[idx] = params[cell]
        end
    end
end
book.write 'report.xls'


#=====
tech_data.txt

01,Number of layers,%LAYNUM%,6
02,Min drill,%MIN_DRILL%,11.811
03,Min pad,%MIN_PAD%,23.622
04,Min line width,%MIN_LINE_WIDTH%,11
05,Min lines space,%MIN_LINE_GAP%,10
06,PCB type,%PCB_TYPE%,FOIL
.... более 60 параметров

sdio ★★★★★
()
Последнее исправление: sdio (всего исправлений: 1)
Ответ на: комментарий от sdio

заполнять расчитанными данными его заранее оформленный xls

хорошее предложение. я чуть выше написал, как это же сделать без ruby spreadsheet (и для таблиц, которые слишком сложны для этой библиотеки).

и насколько хорошо spreadsheet сохраняет всякое форматирование и прочую ерунду?

anonymous
()
Ответ на: комментарий от anonymous

Вроде нормально, только лого в виде картинки корежит (сбрасывает размер ячейки)

sdio ★★★★★
()
Ответ на: комментарий от anonymous

Дальше мы делаем на документ unzip и получаем кучу всякого барахла, среди которого есть xml с содержимым.

Да я так тоже делал.

sdio ★★★★★
()

Что в плане создания и редактирования электронных таблиц у python и ruby, например?

для питона есть pyexelerator и xlrd/xlwt

linuxnewb
()

Интересуют высокоуровневые интерпретируемые ( а не компилируемые ) языки. Для linux, разумеется.

Как насчёт R?

anonymous
()

Если нет интоксикации на java, то есть такая вкусная библиотека - poi

cab ★★★★
()
Ответ на: комментарий от router

Вариант интересный, посмотрю обязательно. Може и не нужны все эти автофильтры, или их делать после на powershell

Вообще powershell на мой взгляд не лучший выбор - всеравно потребуется офис, и использовать ублюдочный automation, либо подключать сторонние библиотеки (что с успехом можно сделать и в mono)

Orlangoor ★★★★★
()
Ответ на: комментарий от Orlangoor

Он всегда не лучший выбор. По сравнению с любым языком тормоза просто поражают.

router ★★★★★
() автор топика

java + apache poi

или

groovy + apache poi

NixU
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.