2015-04-05 5 views

ответ

26

Из выше ваших потребностей, вы должны будете использовать как Python (для экспорта панд кадра данных) и VBA (для удаления существующего содержимого листка и копирования/вставки внешних данных).

С Python: используйте методы to_csv или to_excel. Я рекомендую метод to_csv, который лучше работает с более крупными наборами данных.

# DF TO EXCEL 
from pandas import ExcelWriter 

writer = ExcelWriter('PythonExport.xlsx') 
yourdf.to_excel(writer,'Sheet5') 
writer.save() 

# DF TO CSV 
yourdf.to_csv('PythonExport.csv', sep=',') 

С VBA: copy и paste источник диапазонов назначения.

К счастью, в VBA вы можете вызвать скрипты Python с помощью Shell (при условии, что ваша ОС - Windows).

Sub DataFrameImport() 
    'RUN PYTHON TO EXPORT DATA FRAME 
    Shell "C:\pathTo\python.exe fullpathOfPythonScript.py", vbNormalFocus 

    'CLEAR EXISTING CONTENT 
    ThisWorkbook.Worksheets(5).Cells.Clear 

    'COPY AND PASTE TO WORKBOOK 
    Workbooks("PythonExport").Worksheets(1).Cells.Copy 
    ThisWorkbook.Worksheets(5).Range("A1").Select 
    ThisWorkbook.Worksheets(5).Paste 
End Sub 

В качестве альтернативы, вы можете сделать наоборот: запустить макрос (ClearExistingContent) с Python. Убедитесь, что ваш файл Excel - это макросъемка (.xlsm) с сохраненным макросом для удаления содержимого только листа 5. Примечание: макросы не могут быть сохранены csv-файлами.

import os 
import win32com.client 
from pandas import ExcelWriter 

if os.path.exists("C:\Full Location\To\excelsheet.xlsm"): 
    xlApp=win32com.client.Dispatch("Excel.Application") 
    wb = xlApp.Workbooks.Open(Filename="C:\Full Location\To\excelsheet.xlsm") 

    # MACRO TO CLEAR SHEET 5 CONTENT 
    xlApp.Run("ClearExistingContent") 
    wb.Save() 
    xlApp.Quit() 
    del xl 

    # WRITE IN DATA FRAME TO SHEET 5 
    writer = ExcelWriter('C:\Full Location\To\excelsheet.xlsm') 
    yourdf.to_excel(writer,'Sheet5') 
    writer.save() 
+0

Требуется то, что python может сделать самостоятельно, не используя VBA, но не смог его получить .. Это работало нормально, хотя :). –

+0

Hey @Parfait Я использовал этот код (модифицированный для моих собственных нужд) Спасибо :), но я получаю эту ошибку: 'writer = ExcelWriter ('Corner_Export.xlsx') df_Entry.to_excel (writer, 'Sheet1') df_Apex .to_excel (автор, 'Лист2') df_Exit.to_excel (автор, 'Sheet3') writer.save() '' ImportError: Нет модуль с именем openpyxl' – OParker

+1

StackOverflow, подарок, который продолжит давать! :) Кажется, ваша ошибка может не соответствовать указанному коду. Вы импортируете удаленный или ошибочно объявленный модуль. Это решение не использует 'openpyxl'. – Parfait

0

Проверьте функцию pandas 'to_excel. Вы должны назвать страницу, которую вы хотите записать - возможно, это называется «Лист 5»

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.DataFrame.to_excel.html

+1

это удаляет все мои другие листы. не полезно –

+0

ouch. В этом случае я бы рекомендовал пакет xlwt http://www.python-excel.org/ К сожалению, документация разрежена и потребует некоторой работы по принуждению кадра данных к чему-то, что может обрабатывать xlwt. Возможно, вы посмотрите на источник, чтобы получить то, что хотите. Также обратите внимание: он обрабатывает файлы * .xls, а не * .xlsx. – Jody

+0

Спасибо за ответ. я просмотрел документацию xlwt пару дней назад и не смог найти простой способ выполнить задачу. Итак, я решил выполнить эту задачу в VBA и полностью удалить python. это был кусок пирога в VBA. :) Желаю, чтобы это было так просто в python, а также –