Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
5 / 2 / 3
Регистрация: 15.05.2019
Сообщений: 91

xls to xml

07.10.2021, 17:21. Показов 2284. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Потихоньку осваиваю питона, написал скриптик для перевода файлов xls в xml. Может кто-нибудь прокомментировать код? Что лучше было бы сделать по другому (например для более "скоростного" вывода данных)?

И несколько вопросов:
1. Как можно избежать добавлений None - значений в список? (я их просто заменял пустой строкой)
2. Хотелось бы ещё узнать как можно реализовать разделение выходящего файла по его размеру. Допустим, если его вес больше 1мб, то создавался бы следующий файл и т.д.

Суть скрипта: Берёт данные из файла экселя -> строит xml схему -> заносит туда данные -> выводит xml файл. Так же прикладываю файлик из которого берёт значения.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import xml.etree.cElementTree as ET
from xml.dom import minidom
from openpyxl import load_workbook
from datetime import datetime
 
# Загружаем файл экселя
wb = load_workbook('fortest.xlsx')
ws = wb.worksheets[0]
 
# Добавляем данные из книги в список
sheet = wb.active  # Активный лист в книге
 
# GUID, ячейка А. Обычно одинаковый для всей книги
val_guid = ws['A2'].value
print(val_guid)
 
# Version, ячейка B. Обычно одинаковая для всей книги
val_ver = '0' + str(ws['B2'].value)
print(val_ver)
 
# Кадастровые номера, ячейка С
val_cad_num = []
for val in sheet['C'][1:]:
    val_cad_num.append(val.value)
print(val_cad_num)
 
# Type, ячейка D
type_value = []
for val in sheet['D'][1:]:
    type_value.append(val.value)
print(type_value)
 
# Value, ячейка E
val_value = []
for val in sheet['E'][1:]:
    val_value.append(val.value)
print(val_value)
 
# cost index, ячейка F
val_cost_index = []
for val in sheet['F'][1:]:
    val_cost_index.append(val.value)
print(val_cost_index)
 
# app date, ячейка G
val_app_date = []
for val in sheet['G'][1:]:
    try:
        val_app_date.append(datetime.date(val.value))
    except:
        val_app_date.append(val.value)
 
 
print(val_app_date)
 
# det date, ячейка H
val_det_date = []
for val in sheet['H'][1:]:
    try:
        val_det_date.append(datetime.date(val.value))
    except:
        val_det_date.append(val.value)
print(val_det_date)
 
 
# функция "красивого" сохранения xml
def indent(elem, level=0):
    i = "\n" + level * "  "
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "  "
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for elem in elem:
            indent(elem, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i
 
 
# Формирование xml файла
root = ET.Element('interact_entry_realty', guid=val_guid, version=val_ver)  # шапка
objects = ET.SubElement(root, 'objects')  # Объекты
for cnum, tval, vval, vci, vappd, vdetd in zip(val_cad_num, type_value, val_value, val_cost_index, val_app_date,
                                               val_det_date):
    obj = ET.SubElement(objects, 'object')  # Объект
    cad_num = ET.SubElement(obj, 'cad_number')  # Кадастровый номер
    cad_num.text = cnum
    type = ET.SubElement(obj, 'type')  # Тип объекта
    type.text = '00' + str(tval)
    inf_obj = ET.SubElement(obj, 'information_object')
    cost = ET.SubElement(inf_obj, 'cost')
    value = ET.SubElement(cost, 'value')
    value.text = str(vval)
    cost_index = ET.SubElement(cost, 'cost_index')
    cost_index.text = str(vci)
    app_date = ET.SubElement(cost, 'approvement_date')
    if vappd == None:  # Делаем строку пустой, если нет значения
        vappd = ''
    app_date.text = str(vappd)
    det_date = ET.SubElement(cost, 'determination_date')
    det_date.text = str(vdetd)
 
print(minidom.parseString(ET.tostring(root, encoding='utf-8')).toprettyxml(
    indent=' '))  # .tostring(root, encoding='unicode'))
indent(root)
ET.ElementTree(root).write('toxml.xml', encoding='utf-8', method='xml', xml_declaration=True)
Вложения
Тип файла: xlsx fortest.xlsx (12.6 Кб, 22 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.10.2021, 17:21
Ответы с готовыми решениями:

Ко всем файлам добавилось .xml, теперь они в формате ***.xls.XML, ***doc.XML (изначально в Word и Excel)
при копировании с одного ноутбука на другом (изначально на новом не было офиса, м.б. из-за этого файлы так перенаименовались) они появились...

XML -> XLS
Есть XML-файл, нужно создать XLS. Это возможно вообще??

Конвертер xml to xls
Здравствуйте! Необходимо считать xml файл, и из тегов информацию записать в MSExel, то есть в xls формат, в табличный вид. С помощью любых...

1
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
07.10.2021, 17:32
Цитата Сообщение от nighte1f Посмотреть сообщение
from xml.dom import minidom
DOM => SAX.
Ну и, наверно, имеет смысл отказаться от XLS и использовать XLSX. Там, по идее, должны быть Stream XLSX Reader'ы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2021, 17:32
Помогаю со студенческими работами здесь

XML -> Excel (XLS)
Всезнающий All, возникла проблема : нужно сгенерировать из некоторого XML документа excel-ский файл, как это можно сделать (не использую...

Экспорт xls на xml
Здравствуйте Всем!!! Уже несколько дней голову ломаю на эту задачу и никак неполучается. Пожалуйста помогите чем сможете. Есть один...

Работа с .xml(xls) в c#
Может Вы мне еще поможете с такой проблемой у меня есть шаблонный файл .xml как мне программно его открыть и заполнить только определенные...

Конвертор из xls в xml
Добрый день уважаемые! Помогите разобраться с написанием конвертора! Действовать я хочу по следующей схеме - сначала передача данных excel...

Чтение xls/xml.
У меня есть файл xls 30000 записей. Читаю литературу везде написано, что запускается эксель и читаются уже данные. Нельзя не запуская...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru