gpt4 book ai didi

c# - 有没有办法把word文档升级到2010

转载 作者:太空狗 更新时间:2023-10-30 00:56:32 25 4
gpt4 key购买 nike

场景:我有大约 14000 个 word 文档需要从“Microsoft Word 97 - 2003 文档”转换为“Microsoft Word 文档”。换句话说升级到 2010 格式 (.docx)。

问题:有没有一种简单的方法可以使用 API 或其他方式来做到这一点?

注意:我只能找到一个将文档转换为 .docx 的 Microsoft 程序,但它们仍然以兼容模式打开。如果可以将它们转换为新格式,那就太好了。与您打开旧文档时获得的功能相同,它为您提供了转换它的选项。

编辑:刚找到http://msdn.microsoft.com/en-us/library/microsoft.office.interop.word._document.convert.aspx研究如何使用它。

EDIT2:这是我当前用于转换文档的函数

Private Sub btnConvert_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConvert.Click
FolderBrowserDialog1.ShowDialog()
Dim mainThread As Thread
If Not String.IsNullOrEmpty(FolderBrowserDialog1.SelectedPath) Then
lstFiles.Clear()

DirSearch(FolderBrowserDialog1.SelectedPath)
ThreadPool.SetMaxThreads(1, 1)
lstFiles.RemoveAll(Function(y) y.Contains(".docx"))
TextBox1.Text += "Conversion started at " & DateTime.Now().ToString & Environment.NewLine
For Each x In lstFiles
ThreadPool.QueueUserWorkItem(New WaitCallback(AddressOf ConvertDoc), x)
Next

End If
End Sub
Private Sub ConvertDoc(ByVal path As String)
Dim word As New Microsoft.Office.Interop.Word.Application
Dim doc As Microsoft.Office.Interop.Word.Document
word.Visible = False

Try
Debug.Print(path)
doc = word.Documents.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing)
doc.Convert()

Catch ex As Exception
''do nothing
Finally
doc.Close()
word.Quit()
End Try

End Sub`

它让我选择一个路径,然后在子文件夹中找到所有文档文件。该代码并不重要,所有用于转换的文件都在 lstFiles 中。目前唯一的问题是即使只有 10 个文档也需要很长时间才能转换。我应该为每个文档使用一个单词应用程序而不是重复使用它吗?有什么建议吗?

它还会在大约 2 或 3 次转换后打开 word 并开始闪烁但继续转换。

EDIT3:对上面的代码进行了一点调整,它运行得更干净。虽然需要 1 分 10 秒来转换 8 个文件。考虑到我有 14000,我需要转换此方法将花费相当长的时间。

EDIT4:再次更改代码。现在使用线程池。好像跑得快了点。仍然需要在更好的计算机上运行才能转换所有文件。或者按文件夹慢慢做。任何人都可以想出任何其他方法来优化它吗?

最佳答案

我在本地运行了您的代码,仅进行了一些小的修改以改进跟踪和计时,并且“只”用了 13.73 秒来完成 12 个文件。这将在大约 4 小时内处理完您的 14,000 个。我在带有双核处理器的 Windows 7 x64 上运行 Visual Studio 2010。也许您可以使用速度更快的计算机?

这是我的完整代码,这只是一个带有单个按钮 Button1 和 FolderBrowserDialog FolderBrowserDialog1 的表单:

Imports System.IO

Public Class Form1

Dim lstFiles As List(Of String) = New List(Of String)

Private Sub DirSearch(path As String)


Dim thingies = From file In Directory.GetFiles(path) Where file.EndsWith(".doc") Select file

lstFiles.AddRange(thingies)

For Each subdir As String In Directory.GetDirectories(path)
DirSearch(subdir)
Next
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
FolderBrowserDialog1.ShowDialog()

If Not String.IsNullOrEmpty(FolderBrowserDialog1.SelectedPath) Then
lstFiles.Clear()

DirSearch(FolderBrowserDialog1.SelectedPath)
Dim word As New Microsoft.Office.Interop.Word.Application
Dim doc As Microsoft.Office.Interop.Word.Document
lstFiles.RemoveAll(Function(y) y.Contains(".docx"))
Dim startTime As DateTime = DateTime.Now
Debug.Print("Timer started at " & DateTime.Now().ToString & Environment.NewLine)
For Each x In lstFiles
word.Visible = False
Debug.Print(x + Environment.NewLine)
doc = word.Documents.Open(x)
doc.Convert()
doc.Close()
Next
word.Quit()
Dim endTime As DateTime = DateTime.Now
Debug.Print("Took " & endTime.Subtract(startTime).TotalSeconds & " to process " & lstFiles.Count & " documents" & Environment.NewLine)
End If

End Sub
End Class

关于c# - 有没有办法把word文档升级到2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7487298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com