Но если я запущу их в планировщике задач, он не только откажется работать. создайте 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
Код: Выделить всё
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
Код: Выделить всё
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($_)
}
}
}
Код: Выделить всё
cd c:\scripts\
.\ConvertToPDF.ps1 -ExcelFilePath "c:\scripts\Book1.xlsx" -WorksheetName "Sheet1" -OutputFolderPath "c:\scripts\"
Код: Выделить всё
start "C:\Python3_10\python.exe" "C:\scripts\pycom.py"
Мой диспетчер задач
Я пробовал следующее
[

< /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