|
|
|
При чтении xml из Excel некоторые числа подменяются текстом | ☑ | ||
|---|---|---|---|---|
|
0
Аня Анютка
12.08.15
✎
11:02
|
Здравствуйте!
Проблема такая: выгружаю из 1с в xml, а затем открываю получившийся файл Excel-ем. И некоторые числовые данные нормальные (числовой формат), а некоторые - переделываются в текстовые. Конкретно: колонки Количество и Сумма - числа, а ЦенаПолн и ЦенаЦех - текст (хотя изначально в 1с-ке все это - числа). Код выгрузки: [code] ИмяФайла = "C:\TempXML\1.xml"; ЗаписьXML = Новый ЗаписьXML; ЗаписьXML.ОткрытьФайл(ИмяФайла, "UTF-8"); ЗаписьXML.ЗаписатьОбъявлениеXML(); ЗаписьXML.ЗаписатьНачалоЭлемента("_1CV8DtUD", "http://www.1c.ru/V8/1CV8DtUD/"); Для каждого стр Из ТаблицаДляВывода Цикл ЗаписьXML.ЗаписатьНачалоЭлемента("СтрокаТЗ"); ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура"); ЗаписатьXML(ЗаписьXML,стр.Номенклатура.Наименование, "Номенклатура"); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("Количество"); ЗаписатьXML(ЗаписьXML,стр.Количество,"Количество"); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("Сумма"); ЗаписатьXML(ЗаписьXML,стр.Сумма,"Сумма"); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("ЦенаПолн"); ЗаписатьXML(ЗаписьXML,стр.ЦенаПолн,"ЦенаПолн"); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьНачалоЭлемента("ЦенаЦех"); ЗаписатьXML(ЗаписьXML,стр.ЦенаЦех,"ЦенаЦех"); ЗаписьXML.ЗаписатьКонецЭлемента(); ЗаписьXML.ЗаписатьКонецЭлемента(); //СтрокаТЗ КонецЦикла; ЗаписьXML.ЗаписатьКонецЭлемента(); //V8Exc:_1CV8DtUD ЗаписьXML.Закрыть(); [/code] Данные в ТаблицаДляВывода получаю из регистров ЦеныНоменклатуры и ПродажиОбороты. Файл-результат: http://rghost.ru/79smvQ97s |
|||
|
1
Живой Ископаемый
12.08.15
✎
11:04
|
а проблема какая?
|
|||
|
2
Аня Анютка
12.08.15
✎
11:09
|
(1) проблема в том, что числа должны остаться числами. Но они не все остаются числами.
|
|||
|
3
Аня Анютка
12.08.15
✎
11:10
|
(1) цитирую первый пост "выгружаю из 1с в xml, а затем открываю получившийся файл Excel-ем. И некоторые числовые данные нормальные (числовой формат), а некоторые - переделываются в текстовые"
|
|||
|
4
Живой Ископаемый
12.08.15
✎
11:10
|
ну то есть нужно просто не читать этот ХМЛ Екселем, и тогда числа будут оставаться числами - верно?
(вообще не могу придумать зачем ХМЛ читать Екселем) |
|||
|
5
Живой Ископаемый
12.08.15
✎
11:11
|
2(3) В этой цитате описание положения дел, и нет постановки проблемы
|
|||
|
6
Мимохожий Однако
12.08.15
✎
11:12
|
(0)Открой файл блокнотом и посмотри
|
|||
|
7
Аня Анютка
12.08.15
✎
11:13
|
(4) 1с стоит на сервере, пользователи работают по удаленке, на сервере нет Excel, поэтому приходится выгружать в xml. Но конечному пользователю нужен отчет в Excel. Поэтому вот так и делаем: из 1с выгружаем в xml, а потом открываем через Excel его.
|
|||
|
8
Живой Ископаемый
12.08.15
✎
11:14
|
Чтобы сохранять отчет в Ексель на компе не обязан быть установлен Ексель.
|
|||
|
9
Живой Ископаемый
12.08.15
✎
11:14
|
Поэтому вы несете чушь.
|
|||
|
10
Аня Анютка
12.08.15
✎
11:15
|
(6) в блокноте между цифрами различия нет (и у Количества и у ЦенаПолн дробная часть отделяется точкой):
<СтрокаТЗ> <Номенклатура> <Номенклатура>АСБОКАРТОН КАОН-1 3 х1000х800 мм </Номенклатура> </Номенклатура> <Количество> <Количество>0.55</Количество> </Количество> <Сумма> <Сумма>24662</Сумма> </Сумма> <ЦенаПолн> <ЦенаПолн>15376.02</ЦенаПолн> </ЦенаПолн> <ЦенаЦех> <ЦенаЦех>19334.63</ЦенаЦех> </ЦенаЦех> </СтрокаТЗ> |
|||
|
11
Аня Анютка
12.08.15
✎
11:16
|
(8) Тогда скажите, как еще это можно сделать. Просто я других способов не знаю. Чего обзываетесь-то? Подскажите решение.
|
|||
|
12
Dilgorp
12.08.15
✎
11:18
|
(11) поместить отчет в ТабличныйДокумент и
ТабличныйДокумент (SpreadsheetDocument) Записать (Write) Синтаксис: Записать(<ИмяФайла>, <ТипФайлаТаблицы>) Параметры: <ИмяФайла> (обязательный) Тип: Строка. Имя файла, в котором сохраняется табличный документ. <ТипФайлаТаблицы> (необязательный) Тип: ТипФайлаТабличногоДокумента. Формат, в котором будет сохранен табличный документ. Значение по умолчанию: MXL. Описание: Записывает табличный документ в файл. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Примечание: При работе на сервере, веб-клиенте или через внешнее соединение нет возможности сохранять в формате XLS95. Не поддерживается сохранение в PDF картинок типа Метафайл. При работе на веб-клиенте вызов метода выполняет обращение к серверу. При работе на мобильной платформе возможно сохранение только в формат mxl. Пример: ТабДок.Записать("C:\My Documents\Таблица2.mxl"); ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType) ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType) Значения ANSITXT (ANSITXT) DOCX (DOCX) HTML (HTML) HTML3 (HTML3) HTML4 (HTML4) HTML5 (HTML5) MXL (MXL) MXL7 (MXL7) ODS (ODS) PDF (PDF) TXT (TXT) XLS (XLS) XLS95 (XLS95) XLS97 (XLS97) XLSX (XLSX) Описание: Содержит варианты форматов файлов для сохранения табличного документа. Используется для определения параметра <ТипФайлаТаблицы> метода Записать. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). Возможен обмен с сервером. |
|||
|
13
Живой Ископаемый
12.08.15
✎
11:20
|
ТабличныйДокумент (SpreadsheetDocument)
Записать (Write) Синтаксис: Записать(<ИмяФайла>, <ТипФайлаТаблицы>) Параметры: <ИмяФайла> (обязательный) Тип: Строка. Имя файла, в котором сохраняется табличный документ. <ТипФайлаТаблицы> (необязательный) Тип: ТипФайлаТабличногоДокумента. Формат, в котором будет сохранен табличный документ. Значение по умолчанию: MXL Описание: Записывает табличный документ в файл. Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение. Примечание: При работе на сервере, веб клиенте или через внешнее соединение нет возможности сохранять в формате XLS95. Не поддерживается сохранение в PDF картинок типа Метафайл. При работе на веб-клиенте вызов метода выполняет обращение к серверу. Пример: ТабДок.Записать("C:\My Documents\Таблица2.XLS","XLS"); //<< СЮДА СМОТРЕТЬ |
|||
|
14
Живой Ископаемый
12.08.15
✎
11:21
|
Ой, только
ТабДок.Записать("C:\My Documents\Таблица2.XLS",ТипФайлаТабличногоДокумента.XLS97); //<< СЮДА СМОТРЕТЬ |
|||
|
15
Аня Анютка
12.08.15
✎
11:22
|
(12) В этом случае получится ли книга Excel? (т.е. не один лист, как обычно 1с сохраняет, а именно книга с возможностью добавления листов)?
|
|||
|
16
Аня Анютка
12.08.15
✎
11:23
|
(13) тоже вопрос (15)
|
|||
|
17
Живой Ископаемый
12.08.15
✎
11:23
|
2(15) Эти листы отправить пользователю на комп и пусть собирает книгу. И числа не будут текстом.
Верно? |
|||
|
18
Живой Ископаемый
12.08.15
✎
11:24
|
Если блин он в Екселвскую книгу импортирует сырой ХМЛ, то уж добавить новфй лист из отдельного файла как-нибудь сможет
|
|||
|
19
Аня Анютка
12.08.15
✎
11:27
|
(18) он не импортирует, он просто Excel-ем открывает. Excel позволяет это делать.
(17) Директору эти заморочки не нужны. Ему нужно готовое решение. Одно дело - открыть сформированный файл из Excel (какая разница - какое у него расширение?), а другое - что-то там доделывать в файле еще. |
|||
|
20
ДенисЧ
12.08.15
✎
11:27
|
(15) В любом случае файл екселя - есть книга. И страницы уж точно добавлять можно
|
|||
|
21
Lama12
12.08.15
✎
11:28
|
(15) Ищи тему за последние два дня по добавлению листов в книгу ексель. Обсуждалось или вчера или позавчера.
|
|||
|
22
Живой Ископаемый
12.08.15
✎
11:29
|
2(19) я гарантирую, что ексевский файл Екселем он сможет открыть. Ексель позволяет и это делать также
|
|||
|
23
Аня Анютка
12.08.15
✎
11:31
|
(21) о, спасибо, сейчас поищу
|
|||
|
24
Dilgorp
12.08.15
✎
11:32
|
(19) Если нет возможности поставить на сервере ексель или же разобраться как в табличном документе добавлять страницы, можно извратиться по-другому
поднять виртуалку с екселем в виртуалке записать файл и спокойно рассылать кому надо |
|||
|
25
Dilgorp
12.08.15
✎
11:33
|
(24) самый крайний вариант
|
|||
|
26
Живой Ископаемый
12.08.15
✎
11:34
|
Ну и наконец вишенка на торте, все что написано в (0) Можно было сделать вот так:
ИмяФайла = "C:\TempXML\1.xml"; ЗаписьТекста = Новый записьТекста(ИмяФайла ); СтрокаДляЗаписи = ТиповыеОтчеты.СериализоватьОбъектXDTO(ТаблицаДляВывода); ЗаписьТекста.ЗаписатьСтроку(СтрокаДляЗаписи ); ЗаписьТекста.Закрыть(); И тогда бы был правильный ХМЛ, все числа в котором Ексель интерпретировал бы исключительно как число |
|||
|
27
magicSan
12.08.15
✎
11:37
|
сделай запятую вместо точки
|
|||
|
28
Аня Анютка
12.08.15
✎
11:40
|
(26) попробовала, кислая вишня, вообще непонятно что получается при открытии Excelem
http://rghost.ru/7pYFRLhCM |
|||
|
29
Мимохожий Однако
12.08.15
✎
11:43
|
Научи директора менять формат колонок или установи на сервер Excel
|
|||
|
30
Живой Ископаемый
12.08.15
✎
11:44
|
А вы говорите, все равно какое расширение, Ексель это позволяет.
Тупой ваш Ексель. |
|||
|
31
Живой Ископаемый
12.08.15
✎
11:45
|
Даже ХМЛ файл не может открыть...
|
|||
|
32
Аня Анютка
12.08.15
✎
11:45
|
(21) нашла.. я так поняла, что добавляют листы всетки через application. Но на сервере нет Excel, так что не получится ((
Excel сохранение нескольких страниц |
|||
|
33
Аня Анютка
13.08.15
✎
07:33
|
Испробовала все способы. Все-таки, когда из 1С сохраняешь сразу в Excel, то создается одна страница. Да, потом можно добавить лист (например, Shift+F11), но как тогда вернуться к первому - непонятно. Если выводит все на печать, то видно, что первый лист не потерялся, но закладок (внизу) для перехода по листам нет. И как переключаться или как их добавить я не нашла.
В общем, в данной конкретной ситуации помог совет (27). Добавила программную замену точек на запятые, теперь все числа стали числами :) По крайней мере, Excel распознает их как таковые и формулы считает. Вот код:
|
|||
|
34
Аня Анютка
13.08.15
✎
07:33
|
Прошу прощения, но почему-то код не отформатировался, хотя заключила его в тэги
|
|||
|
35
b_ru
13.08.15
✎
08:13
|
(33)
>>Все-таки, когда из 1С сохраняешь сразу в Excel, то создается одна страница. Да, потом можно добавить лист (например, Shift+F11), но как тогда вернуться к первому - непонятно. Это самый обычный файл экселя, просто заголовки листов скрыты. http://i.imgur.com/2VscWgc.png |
|||
|
36
Аня Анютка
13.08.15
✎
13:32
|
(34) вот ведь.... век живи... век учись! спасибо!
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |