2015-07-27 1 views
0

Есть ли способ использовать XlsxWriter для получения рабочего листа по имени?Получить рабочий лист по имени в интерфейсе автоматизации объектной модели Excel

import win32com.client, types, pythoncom, sys, os, string 
import xlsxwriter 
xlApp = win32com.client.Dispatch("Excel.Application") 
for file in os.listdir("C:\Users\HUTRC1\Desktop\Escel"): 
    if file.endswith(".xlsx"): 
     fileName = file 
     books = xlApp.Workbooks.Open(r"C:\\Users\\Desktop\\Escel\\" + str(fileName)) 
     ws = books.sheet_by_name("2015 Data") 
     #ws = books.Worksheets[0] 
     ws.Visible = 1 
     fileName.replace(".xlsx","") 
     ws.ExportAsFixedFormat(0, r"C:\\Users\\Desktop\\PDF\\" + str(fileName) + str(".pdf")) 
     books.Close(True, r"C:\\Users\\Desktop\\Escel\\" + str(fileName)) 
+0

AFAIK, вы не можете прочитать рабочие листы Excel на всех с xlsxwriter, просто создать их. – RBarryYoung

+0

Использование Python, [этот вопрос] (http://stackoverflow.com/questions/12250024/how-to-obtain-sheet-names-from-xls-files-without-loading-the-whole-file-in- pytho) поможет вам получить имя рабочего листа? – BruceWayne

+0

@RBarryYoung ws = books.Worksheets [0], похоже, все-таки это делает. Я думаю, это насколько вы можете пойти с xlsxwriter. – user3078335

ответ

1

Предположим, например, что вы хотите добавить диаграмму или форматирование на рабочий лист, созданный Pandas. Затем вам может потребоваться доступ к листу даже при использовании XlsxWriter. По общему признанию, это не открывает существующий файл, но вместо этого находит лист в рабочей книге, которую вы создаете. Вот как вы можете это сделать:

import numpy as np 
import pandas as pd 
from xlsxwriter.utility import xl_range 

writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter') 
workbook = writer.book 

df = pd.DataFrame({'Data': np.random.rand(255)}) 
df.to_excel(writer, 'TEST') 
test_sheet = writer.sheets['TEST'] 

chart = workbook.add_chart({'type': 'scatter'}) 
chart.add_series(
    { 
     'name': 'Rand', 
     'marker': { 
      'type': 'circle', 
      'size': 2, 
      'fill': {'color': '#008000'}, 
      'border': {'none': True}, 
     }, 
     'line': {'none': True}, 
     'categories': "=TEST!{}".format(xl_range(1, 0, 255, 0)), 
     'values': "=TEST!{}".format(xl_range(1, 1, 255, 1)) 
    } 
) 
test_sheet.insert_chart('C1', chart)   
writer.close()