Excel зависает в сценарии Python для экспорта Excel в формате PDF в планировщике задач, но работает нормальноPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Excel зависает в сценарии Python для экспорта Excel в формате PDF в планировщике задач, но работает нормально

Сообщение Anonymous »

Я пытаюсь автоматизировать создание PDF-файла из файла Excel, чтобы каждый день отправлять его по электронной почте. Это должно быть просто, но это не так. Если я запущу эти файлы в командной строке, они запустятся, создадут PDF и закроются из Excel правильно.
Но если я запущу их в планировщике задач, он не только откажется работать. создайте PDF-файл, но Excel зависает и не завершает работу должным образом.
Я пробовал это в Python и PowerShell.
Python wincom32

Код: Выделить всё

from os import getenv
from os.path import basename
from pathlib import Path
from datetime import datetime, timedelta, time
import pythoncom
import os
import shutil
import time
from win32com import client
import win32com.client as w3c

today = datetime.now().date()
path = "C:\\scripts\\"

excel_path = os.path.join(path , 'Book1.xlsx')
pdf_path = os.path.join(path ,'book1.pdf')

#convert to PDF
pythoncom.CoInitialize()
excel =  w3c.Dispatch("Excel.Application")
sheets =  excel.Workbooks.Open(excel_path)
work_sheets = sheets.Worksheets[1]
work_sheets.ExportAsFixedFormat(0, pdf_path)

sheets.Close(False)
excel.Workbooks.Close()
excel = None
pythoncom.CoUninitialize()
запуск сценария:

Код: Выделить всё

python c:\scripts\pycom.py
Python xlwings

Код: Выделить всё

import os
import xlwings as xw

book = xw.Book(r'C:\\scripts\\Book1.xlsx')
sheet = book.sheets("Sheet1")

current_work_dir = os.getcwd()
pdf_path = os.path.join(current_work_dir, "Book1.pdf")

sheet.api.ExportAsFixedFormat(0, pdf_path)

app = xw.apps.active
app.quit()
запуск сценария

Код: Выделить всё

python c:\scripts\xlwings.py
powershell

Код: Выделить всё

param (
[parameter(Mandatory=$true)]
[string]$ExcelFilePath,  # Path to the Excel file
[parameter(Mandatory=$true)]
[string]$WorksheetName,  # Name of the specific worksheet
[parameter(Mandatory=$true)]
[string]$OutputFolderPath  # Path where PDF files will be saved
)

try {
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false
$excel.DisplayAlerts = $false

$workbook = $excel.Workbooks.Open($ExcelFilePath)
$worksheet = $workbook.Worksheets.Item($WorksheetName)

# Generate the PDF file path (customize as needed)
$pdfPath = Join-Path -Path $OutputFolderPath -ChildPath ($workbook.Name -replace '\.xlsx?', '.pdf')

# Export as PDF
$xlFixedFormat = "Microsoft.Office.Interop.Excel.XlFixedFormatType" -as [type]
$worksheet.ExportAsFixedFormat($xlFixedFormat::xlTypePDF, $pdfPath)

$workbook.Close()
$excel.Quit()
}
finally {
# Release COM objects
$worksheet, $workbook, $excel | ForEach-Object {
if ($_ -ne $null) {
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($_)
}
}
}
powershell

Код: Выделить всё

cd c:\scripts\
.\ConvertToPDF.ps1 -ExcelFilePath "c:\scripts\Book1.xlsx" -WorksheetName "Sheet1" -OutputFolderPath "c:\scripts\"
Я пробовал использовать bat-файл для запуска сценариев Python

Код: Выделить всё

start "C:\Python3_10\python.exe" "C:\scripts\pycom.py"
Я протестировал это на своем сложном файле Excel и простом. Мой простой файл — это просто book1.xlsx со словом blah в ячейке A1.
Мой диспетчер задач
Я пробовал следующее
[
Изображение
< /p>
[
Изображение

У меня он запущен с самыми высокими привилегиями
Изображение

И эти настройки
Изображение

Я пытался изучить средство просмотра событий и в ходе исследования нашел эту статью. и выполнил шаги, но это не сработало. Excel по-прежнему зависает в планировщике задач, и мой PDF-файл не создается.
https://shauncassells.wordpress.com/201 ... plication- настройки-специфического-разрешения-не-предоставлять-локальное-разрешение-активации-для-приложения-com-сервера-с-clsid-d63b10c5-bb46-4990-a94f-e40b9d520160-and-a/
Я также попробовал использовать Python Schedule, но это по-прежнему приводит к зависанию Excel в диспетчере задач, а также не создает PDF-файл. Я не понимаю, что происходит.

Код: Выделить всё

import schedule
import time
import subprocess

def xlwings_daily():
subprocess.run(['python', 'xlwings.py'])
def pycom_daily():
subprocess.run(['python', 'pycom.py'])

schedule.every().day.at('08:49').do(xlwings_daily)
schedule.every().day.at('08:55').do(pycom_daily)

while True:
schedule.run_pending()
time.sleep(1)
Мои цели:
  • Он работает каждый день.
  • Файл PDF создан.
  • Excel не зависает в диспетчере задач.


Подробнее здесь: https://stackoverflow.com/questions/786 ... er-but-wor
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»