сгенерировать файл Эксель на сервере

  1. 9 г. назад
    12.03.2015 00:22:17 отредактировано ЗлобнийМальчик

    Господа, подскажите, как можно сгенерировать файл .xslx на сервере одинэски (ну и потом отправить его по почте - но это я и сам разберусь). Эксел на сервере не установлен. Ипользование внешних компонент крайне не желательно

    Ответы: (2) (10) (37)
  2. проблемы с оле?

    Ответы: (2)
  3. (1) хммм.

    ЗлобнийМальчик Эксел на сервере не установлен.

    к чему подключаться по оле?

    Ответы: (3)
  4. (2) видишь - мой телепатический шлем сработал
    я же так и сказал - проблемы с оле

    Ответы: (6)
  5. 8.2 же умеет табличный документ сохранять в xlsx без всяких офисов

    Ответы: (5) (6)
  6. (4) более того - в 8.3.6 еще и читать умеет

  7. (4) о! прикольно. А формулы она может вставить в этот xslx? и как это сделать в бэкграунде?
    (3) чтобы были проблемы надо, чтобы было оле. А его нету. Нет оле - нет проблем

    Ответы: (7) (8)
  8. (6) а зачем вставлять формулы для отправки эксельной таблички по почте?

    Ответы: (9)
  9. (6) нет

  10. (7) чтобы пользователь получил файл эксель с вставленными формулами по почте.

    Ответы: (10)
  11. (9) ну в (0) ничего не написано про вставку формул.
    если она нужна - ставь офис и заполняй через оле..

  12. а что можно из 1Ски отправлять пользователю на почту в виде таблицы с формулами ?

    Ответы: (12)
  13. 12.03.2015 00:35:42 отредактировано ЗлобнийМальчик

    (11) долго объяснять если честно. Пользователи желают получить файл который будет интерактивно меняться в зависимости от того, что они вобьют в специальные ячейски. Сейчас они генерят отчет, вставляют в свой эксель данные из отчета и моделируют ситуацию в зависимости от параметров которые они в экселе выставляют. Хотелось бы этот процесс автоматизировать

    Ответы: (13) (14) (18) (96)
  14. (12) причем я не прошу экселевский calculation engine - пусть формулки посчитаются у клиента когда он откроет этот самый файлик. Мне бы просто xslx с формулами сгенерить без подключения к офису...

  15. (12) а.. ну тогда да - оле в зубы и вперед..
    хотя можно еще пойти другим путем - выгружать xlsx, потом его разархивировать и далее править xml и затем собирать обратно xlsx

    Ответы: (15) (18)
  16. (14) нету оле. И не будет...

    Ответы: (17)
  17. ладно, буду делать в сапе тогда... какой геморрой, еклмн...

  18. (15) я для одного проекта, когда надо было дать пользователям возможность самим делать и заполнять документацию (от 10 до 70 листов ворда с данными из базы) сделал заполнение и корректировку шаблонов через парсинг docx в xml, корректировку xml и обратную сборку docx

    Ответы: (19) (73)
  19. IamAlexy (12) а.. ну тогда да - оле в зубы и вперед..
    хотя можно еще пойти другим путем - выгружать xlsx, потом его разархивировать и далее править xml и затем собирать обратно xlsx

    Кстати - шикарная идея

    Ответы: (20)
  20. (17) ну можно наверное. Тут наверное придется взвесить два варианта - тянуть данные в сап и там генерить файлик или парсить xslx самому....

  21. (18) в сапе специальная библиотека для этих целей есть, полностью объектно ориентированная...

    Ответы: (21) (22)
  22. +(20) а тут блин xml ли парсить....

  23. (20) ну юзай сап..
    или напиши для 1Са свою библиотеку для этих целей, полностью объектно ориентированную..

    Ответы: (23)
  24. 12.03.2015 00:55:49 отредактировано ЗлобнийМальчик

    (22) лень. Лень писать библиотеку и лень тенять данные в сап. Мне за это не заплотют...

  25. Кстати, а разве использование Excel на сервере - это не нарушение лицензии?

    Ответы: (27) (32)
  26. ТС, сделай вручную шаблонный файл Экселя с нужными формулами. 1С пусть просто пишет данные в ячейки, формулы при открытии файла юзером пересчитаются сами.

    Ответы: (26)
  27. 12.03.2015 01:01:06 отредактировано ЗлобнийМальчик

    (25) да это то ежику понятно... Естественно, я не собираюсь сам генерить все форматирование и все формулки... Как записать данные в ячейки в бэкграунде без оле?

    Ответы: (28)
  28. (24) нет.
    разве это не Office Open XML ?

    Ответы: (30)
  29. (26) разобрать в xml, заполнить и собрать обратно?

    Ответы: (29) (33)
  30. 12.03.2015 01:01:49 отредактировано ЗлобнийМальчик

    (28) я уже думаю над этим вариантом. но это на самый крайняк

  31. (27) формат не защищен. А вот использование Excel в серверном режиме (при работе с большим количеством пользователей) - это лично для меня отдельный вопрос.

    Ответы: (31)
  32. (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 считатся как сумма следующих трех ячеек.

    Ответы: (32)
  33. (31) ну это если без ОЛе. Тут то да - если Excel не использовать то и вопросов нет. Я в (24) имел в виду именно использование Excel по OLE...

    Ответы: (34) (35)
  34. +(28) Именно так. Анзип, ЧтениеXML, ЗаписьXML, зип.

    ЗЫ. Неожиданно пришло в голову. Как отнесутся в Германии к скандированию: Zip file?

  35. (32) ну тут все как обычно - лицензия на сервере должна быть офиса.. теоретически.

  36. (32) вот я не уверен что простой лицензии хватит... нуда ладно, это оффтоп.
    А вы только один файл меняли - \xl\worksheets\sheet1.xml ?

    Ответы: (36)
  37. (35) да, ща попробую пихнуть в другую ячейку формулу и собрать обратно

    Ответы: (38)
  38. ЗлобнийМальчик Господа, подскажите, как можно сгенерировать файл .xslx на сервере одинэски (ну и потом отправить его по почте - но это я и сам разберусь). Эксел на сервере не установлен. Ипользование внешних компонент крайне не желательно

    Я делал... Даже небольшую библиотеку запилил для себя на джаве... Делал через джавовскую библиотеку...

    Ответы: (39)
  39. (36) да, все ок.
    просто пихнул формулу для другой строки/ячейки и заархивировал и переименовал архив в xlsx

    -image-

    Ответы: (44) (48)
  40. (37) жабой все могут

    Ответы: (41) (42)
  41. http://poi.apache.org/ этим пользовался

  42. (39) я немогу.. мне проще xml распарсить и затем собрать обратно :)

    Ответы: (43)
  43. 12.03.2015 01:32:01 отредактировано Курильщик

    (39) нетолько лишь все! Я прям из оракела отдавал в запросе готовый отчёт...
    Т.е. я прогрузил эту джава библиотеку в оракл, сделал обертку чтобы секции как в 1с формировались и т.п.

  44. 12.03.2015 01:33:45 отредактировано Курильщик

    (41) не, я не спорю, твой вариант хорош...

  45. 12.03.2015 01:32:51 отредактировано ЗлобнийМальчик

    (38) а у меня че то не сошлось
    сначала я сгенерил простой файл с формулой C1 = A1 + B1
    test_before.7z

    потом ручками исправил B1 на C11
    test_after.7z
    в результате формула стоит правильно, но не пересчитывается при открытии... Как бы теперь все формулы измененнные пересчитать...
    или я че не так делаю...

    Ответы: (45) (49)
  46. (44) не пересчитывается это норм... По f9 обновляет?

    Ответы: (48)
  47. 12.03.2015 01:36:02 отредактировано ЗлобнийМальчик

    нет. Я вообще никак эти формулы обновиться заставить не могу кроме как зайти в ячейку и нажать энтер. На такое бизнесы не согласятся

  48. по идее есть кнопка Calculate now но она не пересчитывает почему то.

  49. (45) (38) а у Вас не так?

  50. (44) у меня пересчитало
    была просто голая формула
    зашел, добавил в нужную ячейку <v>6</v>
    получил при открытии:

    -image-

    Ответы: (50)
  51. 12.03.2015 01:40:48 отредактировано ЗлобнийМальчик

    (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 не пересчитываются

  52. 12.03.2015 01:40:54 отредактировано IamAlexy

    -image-

    архив с разобранным содержимым и собранным файлом
    test.zip

    Ответы: (52)
  53. 12.03.2015 01:45:30 отредактировано ЗлобнийМальчик

    (51) просто Вы меняете значения ячеек. А надо поменять именно формулу текстом - не <v>7</v> а из <f>A1+B1</f> получить <f>A1+C11</f> и чтобы потом как нибудь все эти измененные ячейки с измененными формулами получили новые значения (но это можно и на клиенте - но я пока не вижу какой нибудь кнопки которая бы это позволяла делать)....

  54. нет я в ячейки где небыло формул и значений добавил формулы и значения

    Ответы: (54)
  55. (53) ок щас попробую

  56. 12.03.2015 01:57:19 отредактировано IamAlexy

    там когда в ячейку добавляешь формулу или значение не забудь испрваить

    <c ..../>

    на
    <c......><f></f><v></v></c>

    то есть уходит слэш и появляется закрывающий тег

    Ответы: (56)
  57. (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

  58. хз :)
    у меня нет офиса..
    я открываю на маке через numbers - может особенность мака :)

  59. сохрани свой файл, дай открою проверю

    Ответы: (59)
  60. (58) test_after.zip
    прошу

    Ответы: (80) (97)
  61. посчиталось при открытии без проблем:

    -image-

    поройся, может в майкрософтофисе есть что то типа "пересчитывать формулы при открытии"

  62. опенофис кальк тоже кстати при открытии посчитал

    Ответы: (62)
  63. (61) кстати да. Опенофис считает правильно...

  64. мелкософт такой мелкостофт.. :)

    но это кстати проблема - когда десяток пользователей каждому устанешь объяснять или бегать офис настраивать :)

  65. хотя опять же
    если ты будешь генерировать отчет с РАССЧИТАННЫМИ значениями и просто добавлять формулы.. вот вопрос - как оно сработает?

    Ответы: (65) (66)
  66. (64) ну во первых рассчитанные значения надо как то посчитать - а я писать calculation engine экселя не хочу. А во вторых, обновляться скорее всего не будет... Он по ходу не понимает, что это формула...

    Ответы: (66) (67)
  67. 12.03.2015 02:14:45 отредактировано ЗлобнийМальчик

    (64) [...] какая.... ладно пойду спать - может завтра че надумаю...
    Большое спасибо за участие!

  68. (65) он скорее всего таки понимает - попробуй поменяй значение в ячейке D1

  69. просто он при открытии не пересчитывает

  70. ф9 кстати пересчитывает?

  71. в общем

    Сервис - Параметры... - Вычисления - Автоматически

    это в экселе видимо. хз проверить не могу.
    ну или макрос писать..

  72. Эм... А через Active document не сработает ли? Типа такого: http://infostart.ru/public/88055/
    Тут без формул, но можно и с ними в таком макете-то...

    Ответы: (72)
  73. Дядя Вася А через Active document не сработает ли?

    для этого нужен установленный msoffice

  74. (17) я тоже подобную штуку делал, правда, ещё на 7.7 и для форматов опенофиса (odt/odf)
    например, собирал файл по шаблону, заполняя нужные поля значениями из БД, при этом даже не нужен установленный опенофис

  75. 12.03.2015 07:08:45 отредактировано sda553

    Поройся в пхп решениях, я видел например jdorn.github.io/php-reports , который как то выгружает отчеты в екселе, вроде при этом ничего не требуя

    Ответы: (80)
  76. 12.03.2015 07:22:45 отредактировано sda553

    сам порылся, вообщем вот код, который умеет делать ексели из ничего (xml писателем)
    github.com/phpoffice/phpexcel

    Ответы: (76)
  77. (75) зачем ему php-классы, если xml можно прямо из 1с шпарить?

    Ответы: (77) (80) (83) (84)
  78. (76) для солидности :)
    сырая 1Ска ниначто негодна по этому надо поставить вебсервер поднять там пхп и заюзать "хитрую схему" :)
    разработчекская многоходовочка..

    Ответы: (78) (84)
  79. (77) php никакого отношения к вебсерверу не имеет это просто интерпретатор. Веб-сервер ставить не надо.

    Ответы: (79) (80)
  80. (78) никаких PHP. Хватит и того, что в организации есть 1С и SAP ( и оракл еще на кой то черт купили...) Но посмотреть как оно работает можно....

    Ответы: (85)
  81. (78) (76) (74) а у уважаемых сэров файл из (59) открывается с пересчитанными значениями или нет?

    Ответы: (81) (97)
  82. (80) openoffice, полёт нормальный
    ms сейчас нет под рукой

    Ответы: (82)
  83. (81) open office у меня тоже все замечательно пересчитывает....

  84. (76) сучье млсковское метро!

  85. 12.03.2015 09:13:04 отредактировано sda553

    (76)(77)Чтобы код глянуть, как это делается в рхп. Вы че?
    [...] метро. Полчаса печатал это

  86. 12.03.2015 09:38:33 отредактировано sda553

    (79) это просто пример как делается ексель файл из ничего просто на другом языке программированмя. Портируй код в 1с и радуйся.
    Давайте я сделаю такую 1с обработку, создающие ексели из ничего. За сто рублей на инфостарте

    Ответы: (86)
  87. (85) создание екселя изничего :)

    ТабДок.Записать("file.xlsx", ТипФайлаТабличногоДокумента.XLSX)

    всего 99 рублей за эксклюзивный, заищенный авторскими правами код..

    Ответы: (87)
  88. (86) а на серверном модуле это работает?

    Ответы: (88) (89)
  89. (87) без проблем

    Ответы: (95)
  90. (87)ктож ему запретит то..
    в этом то и прелесть - у тебя работа с xlsx  ведется строго средствами 1С и тебе не важно что там у тебя, серверная или файлова база, вебклиент подключился или линукс..

    Ответы: (90)
  91. 12.03.2015 10:21:32 отредактировано ЗлобнийМальчик

    (89) ок
    задачка решилась следующим образом - для того чтобы эксель понял что ему надо перерассчитать значения, надо удалить теги <v></v> в ячейке.
    test_after.zip
    вот такой файл отрабатывает нормально

    Ответы: (93) (100)
  92. прикольно. ты просто формулу прописал а значение не укзаал и оно видя что его нет при открытии пересчитало?

  93. угу

  94. (90) <v> - это, судя по всему, значение

    Ответы: (94)
  95. (93) ну да...

  96. (88) а в чем тогда проблема, описываемая в данной ветке?

    Ответы: (96)
  97. 12.03.2015 10:26:35 отредактировано ЗлобнийМальчик

    (95) формулки... читай (12)

    Ответы: (98)
  98. (80) (59) работает корректно если в D1 вписать что-то или в C2 enter нажать, в других случаях не обновляется при открытии

    Ответы: (100) (101) (102)
  99. (96) ну тогда посмотри, как делаются формулки в екселе из пхп и портируй это в 1с

    Ответы: (100)
  100. все не читал. делал похожее через помещение файлов во временное хранилище

  101. Новее ›

или зарегистрируйтесь чтобы ответить!