Vb.net 打开文件夹中的每个docx文件并另存为其他文件类型
我有一个控制台应用程序,列出文件夹中的docx文件,并将其转换为另一种文件类型(例如pdf) 以下是代码:Vb.net 打开文件夹中的每个docx文件并另存为其他文件类型,vb.net,ms-word,console,Vb.net,Ms Word,Console,我有一个控制台应用程序,列出文件夹中的docx文件,并将其转换为另一种文件类型(例如pdf) 以下是代码: Sub Main() For Each arg As String In My.Application.CommandLineArgs Select Case Trim(LCase(arg)) Case "/docx-pdf" Dim oWord As Word.Application
Sub Main()
For Each arg As String In My.Application.CommandLineArgs
Select Case Trim(LCase(arg))
Case "/docx-pdf"
Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim path As String
Console.WriteLine("Podaj scieżkę folderu:")
path = Console.ReadLine()
Dim files As String() = Directory.GetFiles(path + "/", "*.docx")
For Each file As String In files
oWord = CreateObject("word.application")
oWord.Visible = False
oDoc = oWord.Documents.Open(file, ReadOnly:=True)
oDoc.SaveAs(FileName:=file.Replace(".docx", ".pdf"), FileFormat:=Word.WdSaveFormat.wdFormatPDF)
oWord.Quit()
Next
End Select
Next
End Sub
我的问题是,在转换文件夹中的每个文件后,应用程序试图打开另一个不存在的文件,我遇到了错误(至少看起来是这样)
我忘记了什么?您收到文件打开错误,说“文件可能已损坏”,很可能是因为您的通配符
*。docx
也会导致在打开docx文件进行编辑时包含Word创建的临时文件(更具体地说,这里:)文件名以波浪号和美元符号(~$
)开头,例如~$nualReport.docx
。这些文件不包含文档内容,只包含打开相应DOCX文件的人员的登录名。您正试图使用Microsoft Word打开这些所有者文件,但实际操作失败
您有两种解决方法:
h
attrbute集),所以只获取非隐藏DOCX文件的列表~$
开头,只需使用Continue For
跳过对文件的进一步处理(我建议使用此选项)
好的,第二个选项对我不起作用,所以我这样做:
Sub Main()
For Each arg As String In My.Application.CommandLineArgs
Select Case Trim(LCase(arg))
Case "/docx-pdf"
Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim path As String
Console.WriteLine("Podaj scieżkę folderu:")
path = Console.ReadLine()
Dim afiles As String() = Directory.GetFiles(path + "\", "*.docx")
Dim bfiles As String() = Directory.GetFiles(path + "\", "~$*")
Dim cfiles = afiles.Except(bfiles)
For Each file As String In cfiles
oWord = CreateObject("word.application")
oWord.Visible = False
oDoc = oWord.Documents.Open(file, ReadOnly:=True)
oDoc.SaveAs(FileName:=file.Replace(".docx", ".pdf"), FileFormat:=Word.WdSaveFormat.wdFormatPDF)
oWord.Quit()
Next
End Select
Next
End Sub
还有其他方法可以把它写得更短更干净吗?你能翻译一下错误吗?找出错误所在的最佳方法是使用调试器逐步检查代码。如果不这样做,我同意这一建议,然后将其临时包装在try-catch中,并在异常情况下输出有关文件的一些详细信息,例如名称等,以便我们可以尝试进一步帮助。好的,我检查了它,您是对的,但第二个选项不会改变任何东西。@xeN–问题已纠正。我用
IO.Path.GetFileName(file)
替换了file
,因为每个文件实际上都是完整的路径。现在StartsWith()
将按预期工作。
Sub Main()
For Each arg As String In My.Application.CommandLineArgs
Select Case Trim(LCase(arg))
Case "/docx-pdf"
Dim oWord As Word.Application
Dim oDoc As Word.Document
Dim path As String
Console.WriteLine("Podaj scieżkę folderu:")
path = Console.ReadLine()
Dim afiles As String() = Directory.GetFiles(path + "\", "*.docx")
Dim bfiles As String() = Directory.GetFiles(path + "\", "~$*")
Dim cfiles = afiles.Except(bfiles)
For Each file As String In cfiles
oWord = CreateObject("word.application")
oWord.Visible = False
oDoc = oWord.Documents.Open(file, ReadOnly:=True)
oDoc.SaveAs(FileName:=file.Replace(".docx", ".pdf"), FileFormat:=Word.WdSaveFormat.wdFormatPDF)
oWord.Quit()
Next
End Select
Next
End Sub