Форум сайта python.su
import openpyxl import sqlite3 # читаем данные с файла excel def example(): """ Один из способов чтения значений :return: """ # создаем базу данных base = sqlite3.connect('testtovar.db') cur = base.cursor() base.execute("""CREATE TABLE IF NOT EXISTS product( ID_TOVAR INT PRIMARY KEY, TOVAR TEXT, ID_ISG TEXT, ISG TEXT, COUNTRY TEXT, BARCOD INT); """) base.commit() wb = openpyxl.reader.excel.load_workbook(filename="tovar.xlsx", data_only=True) sheet = wb.active # Обращаемся к нужной таблице делаем ее активной для чтения # sheet = book.worksheets[1] # таблицы можно получить из массива по индексу (индекс таблицы в файле) # Цикл по строкам начиная со второй (в первой заголовки) for row in range(1, 6, 1): # Объявление списка data = [] # Цикл по столбцам от 1 до 6 for col in range(1, 19079): # value содержит значение ячейки с координатами row, col value = sheet.cell(row, col).value # Список который мы будем добавлять data.append(value) # print(sheet['A' + str(col)].value, sheet['B' + str(col)].value, sheet['C' + str(col)].value, # sheet['D' + str(col)].value, sheet['E' + str(col)].value, sheet['F' + str(col)].value) cur.execute("INSERT INTO product VALUES (?, ?, ?, ?, ?, ?);", data[19079])
cur.execute("INSERT INTO product VALUES (?, ?, ?, ?, ?, ?);", (data[0], data[1], data[2], data[3], data[4], data[5]))
Отредактировано JekaPythonshik (Апрель 2, 2022 12:38:18)
Прикреплённый файлы:
tovar.xlsx (814,9 KБ)
Офлайн
Блин, забыл добавить в конце:
# сохраняем изменения base.commit() # закрытие соединения base.close() example()
Отредактировано JekaPythonshik (Апрель 2, 2022 13:03:11)
Прикреплённый файлы:
Скрин.png (41,2 KБ)
Офлайн
row - это ряд (или строка)
col - это column, колонка (или столбец)
Тебе нужно идти по рядам и брать по шесть колонок из каждого ряда. Когда берёшь колонку, добавляешь её в массив. Потом, когда шесть колонок набрано в массив, записываешь массив в базу данных.
JekaPythonshikcur.execute("INSERT INTO product VALUES (?, ?, ?, ?, ?, ?);", data[19079])
cur.execute("INSERT INTO product VALUES (?, ?, ?, ?, ?, ?);", data)
Офлайн
Так что переделай всё, исходя из этого.
/////
Спасибо, буду пробовать!)
Офлайн
Все сделал!
py.user.next спасибо большое! Вот код, может кому пригодиться:
import openpyxl import sqlite3 # читаем данные с файла excel def example(): """ Один из способов чтения значений :return: """ # создаем базу данных base = sqlite3.connect('globaltest.db') cur = base.cursor() base.execute("""CREATE TABLE IF NOT EXISTS product( ID_TOVAR INT, TOVAR TEXT, ID_ISG TEXT, ISG TEXT, COUNTRY TEXT, BARCOD TEXT); """) # сохраняем БД base.commit() # читаем файл excel wb = openpyxl.reader.excel.load_workbook(filename="tovar.xlsx", data_only=True) sheet = wb.active # Обращаемся к нужной таблице делаем ее активной для чтения # Цикл по строкам начиная со второй (в первой заголовки) for row in range(1, 19079, 1): # Объявление списка data = [] # Цикл по столбцам с 1 по 6 for col in range(1, 7, 1): # value содержит значение ячейки с координатами row, col value = sheet.cell(row, col).value # Список который мы будем добавлять data.append(value) # print(sheet['A' + str(col)].value, sheet['B' + str(col)].value, sheet['C' + str(col)].value, # sheet['D' + str(col)].value, sheet['E' + str(col)].value, sheet['F' + str(col)].value) cur.execute("INSERT INTO product VALUES (?, ?, ?, ?, ?, ?);", (data)) # сохраняем изменения base.commit() # закрытие соединения base.close() example()
Офлайн
JekaPythonshikУ тебя там ошибка в количестве строк. Строк 19079, а переберёт он только с 1-ой по 19078-ую.
Вот код
for i in range(19079): for j in range(6): row = i + 1 col = j + 1 value = sheet.cell(row, col).value ...
Отредактировано py.user.next (Апрель 5, 2022 02:11:34)
Офлайн
py.user.nextПонял, спасибо!
Так что пиши вот так всегда:
for i in range(19079):
for j in range(6):
row = i + 1
col = j + 1
value = sheet.cell(row, col).value
…
Офлайн
JekaPythonshikсовершенно справедливо пишет
Все сделал!py.user.next спасибо большое! Вот код, может кому пригодиться:
Офлайн