Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2020, 12:00   #1
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию Запись на существующий лист эксель, без изменения остальных данных на нем.

Есть код на Python:
Код:
import xlwt
import pandas as pd
import win32com.client as wincl
from pandas import ExcelWriter
from pandas import ExcelFile
import subprocess
from tkinter.filedialog import askopenfilename
import pymysql.cursors
import csv                                                                               # Запись в файл
print('Выберите файл с данными от Heidi SQL')
file = askopenfilename()
f = open(file)

id = f.readline()
id1 = id[:-1]
passw = f.readline()
connection = pymysql.connect(host='some',user=str(id1),password=str(passw),db='busorder',charset='utf8mb4')
print("SQL connect successfull")
print('Введите первый день отчетного периода (в формате гггг-мм-дд)')
d1 = input()
print('Введите последний день текущего периода (в формате гггг-мм-дд)')
d2 = input()
try:
    with connection.cursor() as cursor:
        sql ="SQL zapros"     
        df = pd.read_sql(sql,connection)
        
writer pd.ExcelWriter('C:\\Users\\username\\Desktop\\List_Microsoft_Excel.xlsx',engine="openpyxl", mode='a')
        df.to_excel(writer, sheet_name='Лист1', index = False)
finally:
    connection.close()
writer.save()
print('Downloading TUTU db success')
Он вызывает некий sql запрос, данные вставляет в уже заранее созданную книгу b создает там лист с названием Лист1 и записывает данные из запроса туда.
Что нужно сделать:
Нужно, чтобы данные из запроса писались в уже существующий лист в этой книге c формулами(К примеру будет называться Test), а не создавался новый. Важно чтобы формулы и данные на остальных листах были нетронуты. Формулы на листе Test расположены так, что если вставлять данные из запроса с первой ячейки, то они не будут их задевать.
1way2god вне форума Ответить с цитированием
Старый 30.01.2020, 12:24   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Пятая тема вместо того, чтобы просто загуглить... Загружаете существующую книгу load_workbook, устанавливаете ее df.book = ... и вперед.
p51x вне форума Ответить с цитированием
Старый 30.01.2020, 14:04   #3
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

p51x, Вы общаетесь с деревом если честно, покажите пожалуйста на примере действующего кода, я пробовал с append_df_to_Excel, но у меня выдал ошибку :
name 'append_df_to_Excel' is not defined

Последний раз редактировалось 1way2god; 30.01.2020 в 14:30.
1way2god вне форума Ответить с цитированием
Старый 30.01.2020, 14:57   #4
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

Я везде встречаю описание данной функции, но я не понимаю как ее реализовать
Код:
def append_df_to_excel(filename, df, sheet_name='Sheet1', startrow=None,
                       truncate_sheet=False, 
                       **to_excel_kwargs):
    """
    Append a DataFrame [df] to existing Excel file [filename]
    into [sheet_name] Sheet.
    If [filename] doesn't exist, then this function will create it.

    Parameters:
      filename : File path or existing ExcelWriter
                 (Example: '/path/to/file.xlsx')
      df : dataframe to save to workbook
      sheet_name : Name of sheet which will contain DataFrame.
                   (default: 'Sheet1')
      startrow : upper left cell row to dump data frame.
                 Per default (startrow=None) calculate the last row
                 in the existing DF and write to the next row...
      truncate_sheet : truncate (remove and recreate) [sheet_name]
                       before writing DataFrame to Excel file
      to_excel_kwargs : arguments which will be passed to `DataFrame.to_excel()`
                        [can be dictionary]

    Returns: None
1way2god вне форума Ответить с цитированием
Старый 30.01.2020, 17:24   #5
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

решение:
Код:
df = pd.read_sql(sql,connection)
        book = load_workbook('C:\\Users\\username1\\Desktop\\TestFinal.xlsx')
        writer = pd.ExcelWriter('C:\\Users\\username1\\Desktop\\TestFinal.xlsx', engine='openpyxl')
        writer.book = book
        writer.sheets = {ws.title: ws for ws in book.worksheets}
        for sheetname in writer.sheets:
            df.to_excel(writer,sheet_name="Sheet1", startrow=0, index = False, header= True)
1way2god вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как записать в существующий файл Excel, на существующий лист, без перезаписи данных на листе 1way2god Python 0 29.01.2020 17:17
C++ Базы данных. Экспорт данных из access в существующий шаблон word hunter24 Помощь студентам 1 07.11.2016 18:35
Подскажите пожалуйста ...как внести изменения в существующий XML файл в Delphi 7 XMLDocument Igor_kud Общие вопросы Delphi 2 05.10.2013 16:07
Ввод значения в ячейку=новый лист (существующий макрос) w00t Microsoft Office Excel 0 05.02.2013 20:19
как получить данные из Postgres в Лист Эксель briz_tomsk Microsoft Office Excel 0 16.04.2009 14:18