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

Python работа с excel

04.09.2017, 19:09. Показов 5881. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru