我尝试过使用 wkhtml 和 weasyprint 库,但所有这些都会呈现空白的 pdf 页面。唯一有效的选择是 pdfcrowd,但这是一个付费图书馆。我发现了使用 PyQt 转换网页的几个选项:
import sys
from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets
app = QtWidgets.QApplication(sys.argv)
loader = QtWebEngineWidgets.QWebEngineView()
loader.setZoomFactor(1)
loader.page().pdfPrintingFinished.connect(
lambda *args: print('finished:', args))
loader.load(QtCore.QUrl('https://en.wikipedia.org/wiki/Main_Page'))
def emit_pdf(finished):
loader.show()
loader.page().printToPdf("test.pdf")
loader.loadFinished.connect(emit_pdf)
app.exec()
Run Code Online (Sandbox Code Playgroud)
但是,我不太确定如何使其适应本地保存的 html 文件。
我有一个在 for 循环中运行的优化问题。我希望将每个新迭代的结果保存在同一工作簿的不同选项卡中。
这就是我正在做的事情。我没有在同一工作簿中提供多个选项卡,而是获得了多个工作簿。
from openpyxl import Workbook
wb1 = Workbook()
for i in range(n):
ws = wb1.active()
ws.title = str(i)
#code on formatting sheet, optimization problem
wb1.save('outfile'+str(i)+'.xlsx')
Run Code Online (Sandbox Code Playgroud) 我有一个调用Python代码的VBA代码:
Sub Macro1()
Dim Ret_Val
Dim args as String
args = """F:\Asset Management\Global Equity\Better Interface new.py"""
Ret_val = Shell("C:\Users\MRay\anaconda3\python.exe" & args, vbNormalFocus)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,此代码很快将被分发,因此用户名“ MRay”将针对每个用户而更改。出于可维护性的目的,我们希望使此过程自动化,而不是手动对其进行更改。到目前为止,这是我尝试过的:
Sub Macro1()
Dim Ret_Val
Dim args As String
Dim full_id As String
Dim user_id(0 to 2) As String
user_id(0) = "C:\Users\"
user_id(1) = Application.UserName
user_id(2) = "\anaconda3\python.exe"
full_id = Join(user_id)
args = """F:\Asset Management\Global Equity\Better Interface new.py"""
Ret_val = Shell(full_id & args, vbNormalFocus)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,这导致Ret_val的最后一行出现错误,因为我对VBA真的很陌生,所以我只使用了Python中的逻辑。任何帮助都非常感谢:)