.xlsx и xls (последние версии) в pdf с использованием python

С помощью этой ссылки .doc в pdf с использованием python я пытаюсь использовать Excel ( форматы .xlsx и xls)

Ниже приведен измененный код для Excel:

import os
from win32com import client

folder = "C:\\Oprance\\Excel\\XlsxWriter-0.5.1"
file_type = 'xlsx'
out_folder = folder + "\\PDF_excel"

os.chdir(folder)

if not os.path.exists(out_folder):
    print 'Creating output folder...'
    os.makedirs(out_folder)
    print out_folder, 'created.'
else:
    print out_folder, 'already exists.\n'

for files in os.listdir("."):
    if files.endswith(".xlsx"):
        print files

print '\n\n'

word = client.DispatchEx("Excel.Application")
for files in os.listdir("."):
    if files.endswith(".xlsx") or files.endswith('xls'):
        out_name = files.replace(file_type, r"pdf")
        in_file = os.path.abspath(folder + "\\" + files)
        out_file = os.path.abspath(out_folder + "\\" + out_name)
        doc = word.Workbooks.Open(in_file)
        print 'Exporting', out_file
        doc.SaveAs(out_file, FileFormat=56)
        doc.Close()

Показывает следующую ошибку:

>>> execfile('excel_to_pdf.py')
Creating output folder...
C:\Excel\XlsxWriter-0.5.1\PDF_excel created.
apms_trial.xlsx
~$apms_trial.xlsx

Exporting C:\Excel\XlsxWriter-0.5.1\PDF_excel\apms_trial.pdf
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "excel_to_pdf.py", line 30, in <module>
    doc = word.Workbooks.Open(in_file)
  File "<COMObject <unknown>>", line 8, in Open
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'Microsoft Excel
', u"Excel cannot open the file '~$apms_trial.xlsx' because the file format or f
ile extension is not valid. Verify that the file has not been corrupted and that
 the file extension matches the format of the file.", u'xlmain11.chm', 0, -21468
27284), None)
>>>

Есть проблема в

doc.SaveAs(out_file, FileFormat=56)

Какой должен быть формат файла FileFormat? Пожалуйста помоги


person eegloo    schedule 31.12.2013    source источник
comment
Может быть, у вас есть объекты VisualBasic или странные отношения в этом файле Excel? Вы можете подтвердить это, сохранив новый чистый (пустой) файл Excel и попытавшись открыть его. Если все в порядке, то с текущим файлом что-то не так. Кроме того, в какой версии Excel вы сохраняете? Эта библиотека, вероятно, будет работать лучше в формате 97/2004, чем в самых последних версиях Excel.   -  person    schedule 31.12.2013
comment
@Allendar: что я могу сделать для последних версий или выше 2004 года для версий Excel   -  person eegloo    schedule 31.12.2013
comment
Вы уже проверяли, работают ли предыдущие версии? Чтобы новые версии работали, вам нужно изучить эту библиотеку. Возможно, вам нужна альтернативная (более новая) библиотека, чтобы получить поддержку более поздних версий. Но я не могу подтвердить ничего из этого. Единственное, что вы можете сделать, это исследовать, что возможно. Если на Python действительно нет решения, вы всегда можете посмотреть, есть ли инструменты командной строки для сценариев Excel или Ruby/PHP/Perl, которые вы могли бы затем вызывать из оболочки.   -  person    schedule 31.12.2013
comment
@Allendar: я пытался использовать версию 97 - 2003, но она не сохраняется в формате pdf, для них сохраняется только форма xls. Для документа Word проблем нет, а вот для excel проблема. Спасибо, я сделаю больше исследований по этому вопросу.   -  person eegloo    schedule 31.12.2013
comment
blogosfera.co.uk/2013/09/ Получил эту ссылку. Но должно быть какое-то решение для этого в python   -  person eegloo    schedule 31.12.2013
comment
На самом деле, основываясь на сообщении об ошибке, я думаю, проблема в том, что вы находите временный файл, созданный Excel, который начинается с ~$. Когда вы пытаетесь преобразовать временный файл, он жалуется. Попробуйте закрыть Excel, если он у вас открыт, или удалить этот файл, или проигнорировать его с помощью инструкции if.   -  person darthbith    schedule 31.12.2013
comment
У вас также есть ошибка в этой строке: out_name = files.replace(file_type, r"pdf"), потому что вы никогда не заменяете тип файла xls на pdf, вы заменяете только xlsx, поэтому, если вы когда-нибудь попытаетесь преобразовать файл xls, он перезапишет существующий.   -  person darthbith    schedule 31.12.2013
comment
Файл, начинающийся с ~$, является временным файлом. Ваша строка должна быть похожа на if ((files.endswith(".xlsx") or files.endswith('xls')) and files[0] != "~"):   -  person mattvivier    schedule 30.10.2015


Ответы (4)


Ссылка на xlsxwriter:

https://xlsxwriter.readthedocs.org/en/latest/contents.html

С помощью этого вы можете создать файл Excel с .xlsx и .xls

например, сгенерированное имя файла Excel - trial.xls

Теперь, если вы хотите создать PDF-файл этого файла Excel, сделайте следующее:

from win32com import client
xlApp = client.Dispatch("Excel.Application")
books = xlApp.Workbooks.Open('C:\\excel\\trial.xls')
ws = books.Worksheets[0]
ws.Visible = 1
ws.ExportAsFixedFormat(0, 'C:\\excel\\trial.pdf')
person eegloo    schedule 01.01.2014
comment
Хотя xlsxwriter — полезный инструмент, он, к сожалению, не позволяет редактировать существующий файл xls, а только создавать его с нуля. Это делает его бесполезным во многих случаях. - person JeffDror; 25.01.2015
comment
Это решение только для Windows? - person elPastor; 22.10.2018

У меня то же самое и та же ошибка... ОТВЕТ: 57.... см. ниже...

from win32com import client
import win32api

def exceltopdf(doc):
    excel = client.DispatchEx("Excel.Application")
    excel.Visible = 0

    wb = excel.Workbooks.Open(doc)
    ws = wb.Worksheets[1]

    try:
        wb.SaveAs('c:\\targetfolder\\result.pdf', FileFormat=57)
    except Exception, e:
        print "Failed to convert"
        print str(e)
    finally:
        wb.Close()
        excel.Quit()

... в качестве альтернативы хрупкому ExportAsFixedFormat...

person daansteraan    schedule 20.10.2016

GroupDocs.Conversion Cloud SDK для Python — еще один вариант преобразования Excel в PDF. Это платный API. Тем не менее, он предоставляет 150 бесплатных вызовов API в месяц.

P.S. Я проповедник разработчиков в GroupDocs.

# Import module
import groupdocs_conversion_cloud
from shutil import copyfile

# Get your client_id and client_key at https://dashboard.groupdocs.cloud (free registration is required).
client_id = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxx"
client_key = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

# Create instance of the API
convert_api = groupdocs_conversion_cloud.ConvertApi.from_keys(client_id, client_key)

try:

        #Convert PDF to PNG
        # Prepare request
        request = groupdocs_conversion_cloud.ConvertDocumentDirectRequest("pdf", "C:/Temp/Book1.xlsx")

        # Convert
        result = convert_api.convert_document_direct(request)       
        copyfile(result, 'C:/Temp/Book1_output.pdf')
        print("Result {}".format(result))
        
except groupdocs_conversion_cloud.ApiException as e:
        print("Exception when calling get_supported_conversion_types: {0}".format(e.message))

person Tilal Ahmad    schedule 30.04.2021

Вы можете распечатать лист excel в pdf на linux, используя python. Нужно запускать openoffice как безголовый сервер и использовать unoconv, требуется небольшая настройка, но это выполнимо

Вы запускаете OO как демон (службы) и используете его для преобразования для xls, xlsx и doc, docx.

http://dag.wiee.rs/home-made/unoconv/

person lxx    schedule 15.10.2014