Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.59/29: Рейтинг темы: голосов - 29, средняя оценка - 4.59
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 23

Python работа с excel

04.09.2017, 19:09. Показов 5944. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день !

Помогите пожалуйста !
Есть код который работает и правильно отрабатывает свою задачу(открытие xlsx файлов и запись полученных из ячеек данных в txt файл)
Ниже код
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
import os
import openpyxl
 
os.chdir('C:/Users/Torrent/Desktop/scripts/excel')
directory = os.getcwd()
files = os.listdir(directory)
xlsxfiles = filter(lambda x: x.endswith('.xlsx'), files)
output_file = open('myvar.txt', 'w', encoding='utf-8')
for namefile in sorted(xlsxfiles):
    print('\n', namefile)
    wb = openpyxl.load_workbook(filename=namefile, data_only=True)
    sheet = wb['Мониторинг']
    ws = wb.active
    x = 5
    while sheet.cell(row=x, column=1).value is not None:
 
        if sheet.cell(row=x, column=3).value is not None and sheet.cell(row=x, column=4).value is not None:
            beach_cost = int(sheet.cell(row=x, column=3).value)
            club_cost = int(sheet.cell(row=x, column=4).value)
 
            if ((club_cost - beach_cost) >= 7000) or ((club_cost - beach_cost) <= (-7000)):
                rez = club_cost - beach_cost
                print('Выгрузка из excel', '\n', namefile, '\n', sheet.cell(row=x, column=1).value, '\n',
                      sheet.cell(row=x, column=2).value, '\n',
                      sheet.cell(row=x, column=3).value, '\n', sheet.cell(row=x, column=4).value, '\n', rez, '\n',
                      sheet.cell(row=x, column=9).value, file=output_file)
        x += 1
output_file.close()
wb = xlwt.Workbook()
Как мне сделать тоже самое только с xls файлами ?
Пока накодил вот это
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
# coding=utf-8
from __future__ import print_function
import os
import xlrd
import xlwt
 
 
os.chdir('C:/Users/Torrent/Desktop/scripts/excel')
directory = os.getcwd()
files = os.listdir(directory)
xlsfiles = filter(lambda x: x.endswith('.xls'), files)
output_file = open('myvar.txt'.decode('utf-8'), 'w+')
for namefile in sorted(xlsfiles):
    print('\n', namefile)
    print(namefile[0:-4] + '.xlsx')
    rb = xlrd.open_workbook(filename=namefile, formatting_info=False, encoding_override='utf-8')
    sheet = rb.sheets()[0]
    x = 4
    while sheet.cell(rowx=x, colx=1).value is not None:
        if sheet.cell(rowx=x, colx=3).value != xlrd.empty_cell.value and sheet.cell(rowx=x,colx=4).value != xlrd.empty_cell.value:
            beach_cost = int(sheet.cell(rowx=x, colx=3).value)
            club_cost = int(sheet.cell(rowx=x, colx=4).value)
 
            if ((club_cost - beach_cost) >= 7000) or ((club_cost - beach_cost) <= (-7000)):
                rez = club_cost - beach_cost
                print('Выгрузка из excel', '\n', namefile, '\n', sheet.cell(rowx=x, colx=1).value, '\n',
                      sheet.cell(rowx=x, colx=2).value, '\n',
                      sheet.cell(rowx=x, colx=3).value, '\n', sheet.cell(rowx=x, colx=4).value, '\n', rez, '\n',
                      sheet.cell(rowx=x, colx=9).value, file=output_file)
        x += 1
    output_file.close()
Основная проблема в том, что при использовании openpyxl при работе с xlsx файлами пустая ячейка помечается как None, и условие is not None отрабатывает, а при использовании xlrd и xls файлы не отрабатывает.
Ругается на то что ячейка с пустым значением ' ' не может быть переведена в тип int , это и понятно, но мне надо чтобы он пропускал все строки, в которых имеются пустые значения в заданных столбцах.

Надеюсь на помощь !
Заранее спасибо !
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.09.2017, 19:09
Ответы с готовыми решениями:

Excel Работа с гиперссылкой на Python
Уважаемые программисты на Python, Весь интернет проштудировал, и вот вопрос, ещё не придумали скрипт работа на Exel с гиперссылкой? цель...

Вписать данные из одного файла excel в другие excel, word файлы python
Здравствуйте. Надо считать данные с Excel файла(с этим разобрались). Затем, надо вписать их в различные excel и word файлы(каждый из них...

Python работа с Excel
Всем привет! Такая задача на питоне: вывести данные из таблицы эксель с условиями. id вводится пользователем, если id есть в таблице,...

2
Эксперт по компьютерным сетям
 Аватар для Jabbson
5907 / 3359 / 1036
Регистрация: 03.11.2009
Сообщений: 10,008
04.09.2017, 20:42
что если заменить
Python
1
2
if <cell> is not None:
....xxx
на
Python
1
2
if <cell>:
....xxx
0
0 / 0 / 1
Регистрация: 18.11.2016
Сообщений: 23
05.09.2017, 02:12  [ТС]
Все с этим разобрался, только он почему то выходит теперь за пределы ячеек с данными
Вот код в итоге:

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
import os
import xlrd
 
 
 
 
os.chdir('C:/Users/Torrent/Desktop/scripts/excel')
directory = os.getcwd()
files = os.listdir(directory)
xlsfiles = filter(lambda x: x.endswith('.xls'), files)
output_file = open('myvar.txt', 'w' ,encoding='utf-8')
for namefile in sorted(xlsfiles):
    print('\n', namefile)
    rb = xlrd.open_workbook(filename=namefile, formatting_info=False, encoding_override='utf-8')
    sheet = rb.sheets()[0]
    x = 4
    while sheet.cell(rowx=x, colx=0).value is not xlrd.empty_cell.value:
        if sheet.cell(rowx=x, colx=2).value is not xlrd.empty_cell.value and sheet.cell(rowx=x, colx=3).value is not xlrd.empty_cell.value:
            beach_cost = int(sheet.cell(rowx=x, colx=2).value)
            club_cost = int(sheet.cell(rowx=x, colx=3).value)
 
            if ((club_cost - beach_cost) >= 7000) or ((club_cost - beach_cost) <= (-7000)):
                rez = club_cost - beach_cost
                print('Выгрузка из excel', '\n', namefile, '\n', sheet.cell(rowx=x, colx=0).value, '\n',
                      sheet.cell(rowx=x, colx=1).value, '\n',
                      sheet.cell(rowx=x, colx=2).value, '\n', sheet.cell(rowx=x, colx=3).value, '\n', rez, '\n',
                      sheet.cell(rowx=x, colx=8).value, file=output_file)
 
        x += 1
 
output_file.close()
А вот ошибка
Python
1
2
3
4
5
6
Traceback (most recent call last):
  File "C:/Users/Torrent/Desktop/scripts/excel/xls.py", line 17, in <module>
    while sheet.cell(rowx=x, colx=0).value is not xlrd.empty_cell.value:
  File "C:\Users\Torrent\AppData\Local\Programs\Python\Python35\lib\site-packages\xlrd\sheet.py", line 408, in cell
    self._cell_types[rowx][colx],
IndexError: list index out of range
Добавлено через 18 минут
По сути он не переходит на следующий файл, а останавливается в только что открытом, на той ячейке, которая последней подошла под правило

Добавлено через 4 часа 54 минуты
Если кому интересно будет. Получилось решить задачу добавив в код подсчет строк переменная count и после x += 1 условие условие:
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
import os
import xlrd
 
os.chdir('C:/Users/Torrent/Desktop/scripts/excel')
directory = os.getcwd()
files = os.listdir(directory)
xlsfiles = filter(lambda x: x.endswith('.xls'), files)
output_file = open('myvar.txt', 'w', encoding='utf-8')
for namefile in sorted(xlsfiles):
 
    rb = xlrd.open_workbook(filename=namefile, formatting_info=False, encoding_override='utf-8')
    sheet = rb.sheet_by_index(0)
    x = 4
    count = int(sheet.nrows)
    y = count
    while sheet.cell(rowx=x, colx=0).value is not None:
 
        if sheet.cell(rowx=x, colx=2).value is not xlrd.empty_cell.value and sheet.cell(rowx=x, colx=3).value is not xlrd.empty_cell.value:
            beach_cost = int(sheet.cell(rowx=x, colx=2).value)
            club_cost = int(sheet.cell(rowx=x, colx=3).value)
 
            if ((club_cost - beach_cost) >= 7000) or ((club_cost - beach_cost) <= (-7000)):
                rez = club_cost - beach_cost
                print('Выгрузка из excel', '\n', namefile, '\n', sheet.cell(rowx=x, colx=0).value, '\n',
                      sheet.cell(rowx=x, colx=1).value, '\n',
                      sheet.cell(rowx=x, colx=2).value, '\n', sheet.cell(rowx=x, colx=3).value, '\n', rez, '\n',
                      sheet.cell(rowx=x, colx=8).value)
                print('Выгрузка из excel', '\n', namefile, '\n', sheet.cell(rowx=x, colx=0).value, '\n',
                      sheet.cell(rowx=x, colx=1).value, '\n',
                      sheet.cell(rowx=x, colx=2).value, '\n', sheet.cell(rowx=x, colx=3).value, '\n', rez, '\n',
                      sheet.cell(rowx=x, colx=8).value, file=output_file)
        print(x)
        x += 1
        if x == count - 1:
            print("Строки кончились")
            break
output_file.close()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2017, 02:12
Помогаю со студенческими работами здесь

Работа Python совместно с Excel
Не знаю, правильно ли выбрал раздел форума. Решил подружить python с excel. Набрел на сайт...

Работа с Excel, Python, Pandas
Привет всем кто решится помочь, такая проблема ,стоит задача сформировать файл Excel , если он уже сформирован , то создать страницу и...

Работа с Excel на Python (создание магазина)
Здравствуйте! 5 дней назад только начал изучать питон.Дали задание: написать нечто вроде магазина.Привожу полный текст. ...

Работа с документами Excel без Microsoft.Office.Interop.Excel
всем добрый день все дело в том что для своих программ я использую БД Excel но! однако не все устанавливают на компьютере Office, да и...

Работа с Excel через Microsoft.Office.Interop.Excel
Необходимо реализовать програмку взаимодействующую с Excel в режиме реального времени. Проблем несколько: 1. Как сделать так,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
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
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru