2015-07-28 5 views
2

Я пытаюсь открыть существующую книгу под названием «N11 Result.xlsx». Скопируйте весь лист «Лист1» (переименуйте его в «Построить с помощью Python» сначала ...) и вставьте в новый рабочий лист (называемый «Годовой») в пределах одной и той же книги. Я думаю, что последняя строка моего кода не работает ... любая помощь будет полезна.скопируйте весь рабочий лист excel на новый рабочий лист с помощью Python win32com

import os,sys 
sys.path.append(r"""U:\Programming\Python\Python Manipulate Excel""") 
work_dir=r"""U:\Programming\Python\Python Manipulate Excel""" 
file_name='N11 Result.xlsx' 

import win32com.client 
excel = win32com.client.Dispatch('Excel.Application') 
excel.Visible = True 

wb = excel.Workbooks.Open(work_dir+'\\'+file_name) 
ws = wb.Worksheets('Sheet1') 
ws.Name = 'Built with Python' 
wb.Worksheets("Built with Python").Copy(before=wb.Worksheets("Annual")) 
excel.Application.Quit() 

Сообщение об ошибке обнаружился будет

Traceback (самый последний вызов последнего): Файл "U: \ Программирование \ Python \ Python Манипулирование Excel \ Test_createExcel_01.py", строка 17, в wb.Worksheets («Built with Python»). Копировать (before = wb.Worksheets («Annual»)) Файл «C: \ Temp \ gen_py \ 2.7 \ 00020813-0000-0000-C000-000000000046x0x1x7 \ Sheets.py ", строка 113, в звонок ret = self._oleobj_.InvokeTypes (0, LCID, 2, (9, 0), ((12, 1),), индекс com_error: (-21 47352567, 'Возникло исключение., (0, None, None, None, 0, -2147352565), None)

+0

Может быть, посмотреть на одну из библиотек Python для выполнения всего этого: xlwt/xlrd openpyxl, xlsxwriter и т.д. По моему опыту, это гораздо проще, чем возиться с win32com – SiHa

ответ

1

Так что это не то, как вы можете скопировать весь лист в новый лист с помощью pywin32:

# old_sheet: sheet that you want to copy 
old_sheet.Copy(pythoncom.Empty, workbook.Sheets(workbook.Sheets.Count) 
new_sheet = workbook.Sheets(workbook.Sheets.Count) 
new_sheet.Name = 'Annual' 
+0

После того как я изменить '' pythoncom.Empty' в Нет, это сработало. Большое спасибо. :) –

0

Попробуйте отключить wb.Worksheets("Built with Python").Copy(before=wb.Worksheets("Annual")) со следующим кодом.

wb.Worksheets("Built with Python").Cells.Select() 
excel.Selection.Copy(Destination=wb.Worksheets("Annual").Range("A1")) 

Сообщите мне, если это работает. Если он не работает, это может быть каталог, который вы пытаетесь построить, и это может быть причиной.

2
import win32com.client as win32 
    from copy import copy 
    excel = win32.gencache.EnsureDispatch('Excel.Application') 
    #excel.Visible = False 
    excel.DisplayAlerts = False 
    wb0 = excel.Workbooks.Open(dirname + '\\' + 'original.xlsx') 
    ws0 = wb0.Worksheets('Original_sheet') 
    wb2 = excel.Workbooks.Open(dirname + '\\' + writer.path) 
    ws2 = wb2.Worksheets.Add() 
    ws2.Name = 'Copy_original' 
    ws2 = wb2.Worksheets('Copy_original') 
    ws0.Range("A1:AF100").Copy(ws2.Range("A%s:AF%s" % (row, col))) 
    wb2.Save() 
    excel.Application.Quit() 
Смежные вопросы