2013-10-28 10 views
4

Я работаю с этой библиотекой XlsxWriter.Как сохранить лист Excel как HTML в Python?

Я открыл книгу и написал некоторые вещи в нем (considering the official example) -

import xlsxwriter 

# Create a workbook and add a worksheet. 
workbook = xlsxwriter.Workbook('Expenses01.xlsx') 
worksheet = workbook.add_worksheet() 

# Some data we want to write to the worksheet. 
expenses = (
    ['Rent', 1000], 
    ['Gas', 100], 
    ['Food', 300], 
    ['Gym', 50], 
) 

# Start from the first cell. Rows and columns are zero indexed. 
row = 0 
col = 0 

# Iterate over the data and write it out row by row. 
for item, cost in (expenses): 
    worksheet.write(row, col,  item) 
    worksheet.write(row, col + 1, cost) 
    row += 1 

# Write a total using a formula. 
worksheet.write(row, 0, 'Total') 
worksheet.write(row, 1, '=SUM(B1:B4)') 

workbook.close() 

Я прошел через документы строго, но не могу найти сохранить как функциональность.

Есть ли способ (любым способом), чтобы сохранить workbook как HTML файл?

Если это невозможно из кода python, могу ли я как-то написать VBA код и вызвать этот код из python?

+1

Если вы хотите, чтобы генерировать HTML, то почему вы пишете ваши данные таблицы в Excel? Почему бы не напрямую генерировать HTML, используя данные таблицы? –

+0

@VIKASHJAISWAL Потому что у меня уже есть 6-месячный эквивалент усилий по созданию листинга для моего проекта. Это может потребовать ненужных усилий, чтобы сделать это с нуля. – ComputerFellow

ответ

3

Вы можете использовать win32com.client называть VBA макросов. Предположим, что ваш файл называется Bar ...

VBA:

Sub SaveHTML() 
ThisWorkbook.SaveAs Filename:="C:\Foo\Bar.htm", FileFormat:=xlHtml 
End Sub 

Python:

from win32com.client import Dispatch 

xl = Dispatch('Excel.Application') 
xl.Workbooks.Open('C:\Foo\Bar.xlsx') 
#xl.Visible = True -- optional 
xl.Application.Run("SaveHTML") 
xl.Workbooks.Close 

Изменить при необходимости.

EDIT: Я забыл добавить, используя win32com для закрытия Excel - это абсолютная боль. Рабочие книги закроются, но само приложение задержится (проверьте диспетчер задач). Пожалуйста, обратитесь к this SO post об обходном пути для этого.

2

Вы можете сохранить в HTML из Python непосредственно затем прикрепить к электронной почте:

from win32com.client.gencache import EnsureDispatch 
from win32com.client import constants 

yourExcelFile = ... 
newFileName = ... 

xl = EnsureDispatch('Excel.Application') 
wb = xl.Workbooks.Open(yourExcelFile) 
wb.SaveAs(newFileName, constants.xlHtml) 
xl.Workbooks.Close() 
xl.Quit() 
del xl 
Смежные вопросы