Господа, подскажите, как можно сгенерировать файл .xslx на сервере одинэски (ну и потом отправить его по почте - но это я и сам разберусь). Эксел на сервере не установлен. Ипользование внешних компонент крайне не желательно
Господа, подскажите, как можно сгенерировать файл .xslx на сервере одинэски (ну и потом отправить его по почте - но это я и сам разберусь). Эксел на сервере не установлен. Ипользование внешних компонент крайне не желательно
а что можно из 1Ски отправлять пользователю на почту в виде таблицы с формулами ?
(11) долго объяснять если честно. Пользователи желают получить файл который будет интерактивно меняться в зависимости от того, что они вобьют в специальные ячейски. Сейчас они генерят отчет, вставляют в свой эксель данные из отчета и моделируют ситуацию в зависимости от параметров которые они в экселе выставляют. Хотелось бы этот процесс автоматизировать
(12) причем я не прошу экселевский calculation engine - пусть формулки посчитаются у клиента когда он откроет этот самый файлик. Мне бы просто xslx с формулами сгенерить без подключения к офису...
ладно, буду делать в сапе тогда... какой геморрой, еклмн...
(15) я для одного проекта, когда надо было дать пользователям возможность самим делать и заполнять документацию (от 10 до 70 листов ворда с данными из базы) сделал заполнение и корректировку шаблонов через парсинг docx в xml, корректировку xml и обратную сборку docx
(17) ну можно наверное. Тут наверное придется взвесить два варианта - тянуть данные в сап и там генерить файлик или парсить xslx самому....
(18) в сапе специальная библиотека для этих целей есть, полностью объектно ориентированная...
+(20) а тут блин xml ли парсить....
(22) лень. Лень писать библиотеку и лень тенять данные в сап. Мне за это не заплотют...
Кстати, а разве использование Excel на сервере - это не нарушение лицензии?
ТС, сделай вручную шаблонный файл Экселя с нужными формулами. 1С пусть просто пишет данные в ячейки, формулы при открытии файла юзером пересчитаются сами.
(28) я уже думаю над этим вариантом. но это на самый крайняк
(30) в том то и прелесть что ты не используешь Excel вообще.
ты используешь чтение текстового файла и разархивирование зипом..
там кстати несложн
<row r="2" ht="20.35" customHeight="1"> - <c r="A2" s="3"> <f>B2+C2+D2</f> <v>6</v> </c> - <c r="B2" s="4"> <v>1</v> </c> - <c r="C2" s="4"> <v>2</v> </c> - <c r="D2" s="4"> <v>3</v> </c> <c r="E2" s="4" /> <c r="F2" s="4" /> <c r="G2" s="4" /> <c r="H2" s="4" /> <c r="I2" s="4" /> </row>
причем это часть кода которую я получил из файла эксопртированного из numbers (mac os x) в xlsx и затем разархивировав и посмотрев содержимое первого листа.
суть - значение ячейки А2 считатся как сумма следующих трех ячеек.
+(28) Именно так. Анзип, ЧтениеXML, ЗаписьXML, зип.
ЗЫ. Неожиданно пришло в голову. Как отнесутся в Германии к скандированию: Zip file?
(32) ну тут все как обычно - лицензия на сервере должна быть офиса.. теоретически.
ЗлобнийМальчик Господа, подскажите, как можно сгенерировать файл .xslx на сервере одинэски (ну и потом отправить его по почте - но это я и сам разберусь). Эксел на сервере не установлен. Ипользование внешних компонент крайне не желательно
Я делал... Даже небольшую библиотеку запилил для себя на джаве... Делал через джавовскую библиотеку...
http://poi.apache.org/ этим пользовался
(39) нетолько лишь все! Я прям из оракела отдавал в запросе готовый отчёт...
Т.е. я прогрузил эту джава библиотеку в оракл, сделал обертку чтобы секции как в 1с формировались и т.п.
(41) не, я не спорю, твой вариант хорош...
(38) а у меня че то не сошлось
сначала я сгенерил простой файл с формулой C1 = A1 + B1
test_before.7z
потом ручками исправил B1 на C11
test_after.7z
в результате формула стоит правильно, но не пересчитывается при открытии... Как бы теперь все формулы измененнные пересчитать...
или я че не так делаю...
нет. Я вообще никак эти формулы обновиться заставить не могу кроме как зайти в ячейку и нажать энтер. На такое бизнесы не согласятся
по идее есть кнопка Calculate now но она не пересчитывает почему то.
(49) киньте файл архивом.
У меня сначала был вот такой файл
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><dimension ref="A1:C1"></dimension><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="C2" sqref="C2"></selection></sheetView></sheetViews><sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"></sheetFormatPr><sheetData><row r="1" spans="1:3" x14ac:dyDescent="0.25"><c r="A1"><v>3</v></c><c r="B1"><v>4</v></c><c r="C1"><f>A1+B1</f><v>7</v></c></row></sheetData><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"></pageMargins></worksheet>
потом стал вот такой
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><dimension ref="A1:C1"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="C2" sqref="C2"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/><sheetData><row r="1" spans="1:3" x14ac:dyDescent="0.25"><c r="A1"><v>3</v></c><c r="B1"><v>4</v></c><c r="C1"><f>A1+C11</f><v>7</v></c></row></sheetData><pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/></worksheet>
В результате данные в ячейке С1 не пересчитываются
(51) просто Вы меняете значения ячеек. А надо поменять именно формулу текстом - не <v>7</v> а из <f>A1+B1</f> получить <f>A1+C11</f> и чтобы потом как нибудь все эти измененные ячейки с измененными формулами получили новые значения (но это можно и на клиенте - но я пока не вижу какой нибудь кнопки которая бы это позволяла делать)....
нет я в ячейки где небыло формул и значений добавил формулы и значения
(53) ок щас попробую
там когда в ячейку добавляешь формулу или значение не забудь испрваить
<c ..../>
на
<c......><f></f><v></v></c>
то есть уходит слэш и появляется закрывающий тег
(55) может это в версии excel 2010 не реализовано. Все равно не пересчитываются значения.
Было
<?xml version="1.0" encoding="UTF-8"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">
<dimension ref="A1:C2" />
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="G10" sqref="G10" />
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25" />
<sheetData>
<row r="1" spans="1:3" x14ac:dyDescent="0.25">
<c r="A1">
<v>3</v>
</c>
<c r="B1">
<v>4</v>
</c>
<c r="C1">
<f>A1+B1</f>
<v>7</v>
</c>
</row>
<row r="2" spans="1:3" x14ac:dyDescent="0.25">
<c r="A2">
<v>1</v>
</c>
<c r="B2">
<v>2</v>
</c>
<c r="C2">
<v>3</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />
</worksheet>
Стало
<?xml version="1.0" encoding="UTF-8"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" mc:Ignorable="x14ac">
<dimension ref="A1:C2" />
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection activeCell="G10" sqref="G10" />
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25" />
<sheetData>
<row r="1" spans="1:3" x14ac:dyDescent="0.25">
<c r="A1">
<v>3</v>
</c>
<c r="B1">
<v>4</v>
</c>
<c r="C1">
<f>A1+B1</f>
<v>7</v>
</c>
</row>
<row r="2" spans="1:3" x14ac:dyDescent="0.25">
<c r="A2">
<v>1</v>
</c>
<c r="B2">
<v>2</v>
</c>
<c r="C2">
<f>A2+D1</f>
<v>3</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3" />
</worksheet>
я ожидаю видеть в ячейке С2 значение 1 после того как формулы пересчитаются. Вижу все равно значение 3
хз :)
у меня нет офиса..
я открываю на маке через numbers - может особенность мака :)
(61) кстати да. Опенофис считает правильно...
мелкософт такой мелкостофт.. :)
но это кстати проблема - когда десяток пользователей каждому устанешь объяснять или бегать офис настраивать :)
хотя опять же
если ты будешь генерировать отчет с РАССЧИТАННЫМИ значениями и просто добавлять формулы.. вот вопрос - как оно сработает?
(64) ну во первых рассчитанные значения надо как то посчитать - а я писать calculation engine экселя не хочу. А во вторых, обновляться скорее всего не будет... Он по ходу не понимает, что это формула...
(64) [...] какая.... ладно пойду спать - может завтра че надумаю...
Большое спасибо за участие!
(65) он скорее всего таки понимает - попробуй поменяй значение в ячейке D1
просто он при открытии не пересчитывает
ф9 кстати пересчитывает?
в общем
Сервис - Параметры... - Вычисления - Автоматически
это в экселе видимо. хз проверить не могу.
ну или макрос писать..
Эм... А через Active document не сработает ли? Типа такого: http://infostart.ru/public/88055/
Тут без формул, но можно и с ними в таком макете-то...
Дядя Вася А через Active document не сработает ли?
для этого нужен установленный msoffice
(17) я тоже подобную штуку делал, правда, ещё на 7.7 и для форматов опенофиса (odt/odf)
например, собирал файл по шаблону, заполняя нужные поля значениями из БД, при этом даже не нужен установленный опенофис
Поройся в пхп решениях, я видел например jdorn.github.io/php-reports , который как то выгружает отчеты в екселе, вроде при этом ничего не требуя
сам порылся, вообщем вот код, который умеет делать ексели из ничего (xml писателем)
github.com/phpoffice/phpexcel
(81) open office у меня тоже все замечательно пересчитывает....
(76) сучье млсковское метро!
(89) ок
задачка решилась следующим образом - для того чтобы эксель понял что ему надо перерассчитать значения, надо удалить теги <v></v> в ячейке.
test_after.zip
вот такой файл отрабатывает нормально
прикольно. ты просто формулу прописал а значение не укзаал и оно видя что его нет при открытии пересчитало?
(93) ну да...
все не читал. делал похожее через помещение файлов во временное хранилище
(97) это все билли и его кривые продукты :)
(101) а смотрел что находится в <calcChain xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><c r="C2" i="1"/><c r="C1" l="1"/></calcChain> ?
мне кажется оно имеет отношение к
Можно конечно посмотреть. Но пока что удаление тега<v> решает проблему и так.
а я ленивый очень - я неоплачиваемую работу предпочитаю не делать...