日韩欧美国产精品免费一二-日韩欧美国产精品亚洲二区-日韩欧美国产精品专区-日韩欧美国产另-日韩欧美国产免费看-日韩欧美国产免费看清风阁

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

自己動手做一個批量doc轉(zhuǎn)換為docx文件的小工具

freeflydom
2025年3月19日 8:53 本文熱度 486

前言

最近遇到了一個需求,就是要把大量的doc格式文件轉(zhuǎn)換為docx文件,因此就動手做了一個批量轉(zhuǎn)換的小工具。

背景

doc文件是什么?

"doc" 文件是一種常見的文件格式,通常用于存儲文本文檔。它是 Microsoft Word 文檔的文件擴(kuò)展名。"doc" 是 "document" 的縮寫,表示這是一個文檔文件。這種文件格式通常包含文本、圖像、表格、圖形等內(nèi)容,可以使用 Microsoft Word 或其他兼容的文字處理軟件進(jìn)行打開和編輯。

docx文件是什么?

"docx" 文件是 Microsoft Word 2007 及更高版本中使用的文檔文件格式的擴(kuò)展名。它是 Office Open XML (OOXML) 標(biāo)準(zhǔn)的一部分,是一種基于 XML 的開放標(biāo)準(zhǔn)格式,用于存儲文本文檔、圖像、表格、圖形等內(nèi)容。與早期的 ".doc" 格式相比,".docx" 格式具有更高的兼容性和可擴(kuò)展性,并且文件大小通常更小。由于其開放的特性,許多其他文字處理軟件也支持 ".docx" 格式。

為什么要將doc文件轉(zhuǎn)化為docx文件?

將 ".doc" 文件轉(zhuǎn)換為 ".docx" 文件的主要原因包括:

  1. 更先進(jìn)的格式:".docx" 使用 Office Open XML 格式,這是一種更現(xiàn)代、更有效的文件格式。它采用了基于 XML 的結(jié)構(gòu),使得文件更容易解析和處理,同時也提供了更好的兼容性和可擴(kuò)展性。
  2. 減小文件大小:由于 ".docx" 文件采用了更高效的壓縮技術(shù)和文件結(jié)構(gòu),相比 ".doc" 文件通常會更小,這對于存儲和傳輸文件是有利的。
  3. 兼容性:許多最新版本的文字處理軟件更支持 ".docx" 格式,而較舊的 ".doc" 格式可能會在一些軟件中出現(xiàn)兼容性問題。將文件轉(zhuǎn)換為 ".docx" 格式可以確保在不同平臺和軟件中的良好兼容性。
  4. 格式穩(wěn)定性:".docx" 格式的結(jié)構(gòu)更加穩(wěn)定,不容易出現(xiàn)文件損壞或格式錯誤的問題,從而提高了文檔的可靠性。

綜上所述,將 ".doc" 文件轉(zhuǎn)換為 ".docx" 文件可以提高文件的效率、兼容性和穩(wěn)定性,是一種值得推薦的做法。

實(shí)踐

方案使用C#通過Microsoft Office Interop實(shí)現(xiàn)將.doc文件轉(zhuǎn)換為.docx文件。

添加引用:

前提是需要電腦上安裝有word。

頁面設(shè)計如下所示:

選擇doc文件所在的文件夾:

   // 創(chuàng)建一個新的FolderBrowserDialog
   FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
   // 設(shè)置FolderBrowserDialog的屬性
   folderBrowserDialog.Description = "請選擇待轉(zhuǎn)換的doc文件所在的文件夾";
   // 顯示FolderBrowserDialog,并獲取結(jié)果
   if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
   {          
       docFolderPath = folderBrowserDialog.SelectedPath;
       richTextBox1.Text += $"你選擇的待轉(zhuǎn)換的doc文件所在的文件夾是:{docFolderPath}\r\n";
   }

選擇保存docx文件的文件夾:

 // 創(chuàng)建一個新的FolderBrowserDialog
 FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
 // 設(shè)置FolderBrowserDialog的屬性
 folderBrowserDialog.Description = "請選擇保存docx文件的文件夾";
 // 顯示FolderBrowserDialog,并獲取結(jié)果
 if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
 {
     // 用戶已選擇一個文件夾,可以通過folderBrowserDialog.SelectedPath獲取所選文件夾的路徑
     docxFolderPath = folderBrowserDialog.SelectedPath;
     richTextBox1.Text += $"你選擇的保存docx文件的文件夾是:{docFolderPath}\r\n";
 }

開始轉(zhuǎn)換按鈕事件處理函數(shù):

 if (docFolderPath == null || docxFolderPath == null)
 {
     MessageBox.Show("請先選擇doc文件所在的文件夾與保存docx文件的文件夾");
 }
 else
 {
     await DocToDocx();
 }

為了避免阻塞界面,使用了異步方法。

DocToDocx方法如下所示:

  public async System.Threading.Tasks.Task DocToDocx()
  {
      // 使用Task.Run來啟動一個新的異步任務(wù)
      await System.Threading.Tasks.Task.Run(() =>
      {
          // 創(chuàng)建 Word 應(yīng)用程序?qū)嵗?/span>
          Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application();
       
          int i = 1;             
          // 遍歷所有.doc文件
          foreach (string docFile in GetFiles(docFolderPath, "*.doc"))
          {
              // 打開輸入的 .doc 文件
              Document doc = wordApp.Documents.Open(docFile);
              // 獲取不帶擴(kuò)展名的文件名
              string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(docFile);
              // 將擴(kuò)展名改為.docx
              string docxFileName = Path.ChangeExtension(fileNameWithoutExtension, ".docx");
              string docxFilePath = Path.Combine(docxFolderPath, docxFileName);
              // 將 .doc 文件保存為 .docx 格式
              doc.SaveAs2(docxFilePath, WdSaveFormat.wdFormatXMLDocument);
              // 關(guān)閉 .doc 文件
              doc.Close();
              // 釋放 Document 對象的資源
              System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
              // 使用Invoke方法來更新richTextBox1
              richTextBox1.Invoke((Action)(() =>
              {
                  richTextBox1.Text += $"第{i}個文件:{docFile}轉(zhuǎn)換完成 {DateTime.Now}\r\n";
                  // 設(shè)置插入點(diǎn)到文本的最后
                  richTextBox1.SelectionStart = richTextBox1.Text.Length;
                  // 滾動到插入點(diǎn)
                  richTextBox1.ScrollToCaret();
              }));
              i++;
          }
          // 退出 Word 應(yīng)用程序
          wordApp.Quit();
          // 釋放資源
          System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
     
          // 使用Invoke方法來更新richTextBox1
          richTextBox1.Invoke((Action)(() =>
          {
              richTextBox1.Text += $"轉(zhuǎn)換完成 {DateTime.Now}\r\n";
          }));
      });         

GetFiles方法如下所示:

   // 這個方法返回一個IEnumerable<string>,表示文件的路徑
  public IEnumerable<string> GetFiles(string path, string searchPattern)
  {
      // 獲取文件夾下的所有文件
      string[] files = Directory.GetFiles(path, searchPattern);
      // 遍歷所有文件
      foreach (string file in files)
      {
          // 返回當(dāng)前文件
          yield return file;
      }
  }

這里使用了yield關(guān)鍵字,使用yield的好處如下:

  1. 延遲執(zhí)行:迭代器的執(zhí)行會被延遲,直到迭代器被消費(fèi)時才開始。這意味著如果你有一個大的數(shù)據(jù)集合需要處理,但并不需要立即處理所有數(shù)據(jù),那么使用yield可以幫助你節(jié)省內(nèi)存和計算資源。
  2. 簡化代碼:yield可以使你的代碼更簡潔,更易于閱讀和理解。你不需要創(chuàng)建一個臨時的集合來存儲你的結(jié)果,而是可以直接使用yield return來返回結(jié)果。
  3. 無需一次性生成所有結(jié)果:當(dāng)處理大量數(shù)據(jù)時,一次性生成所有結(jié)果可能會消耗大量內(nèi)存。使用yield可以在每次迭代時只生成一個結(jié)果,從而節(jié)省內(nèi)存。

實(shí)現(xiàn)原理其實(shí)很簡單,就是用新版本的word打開再保存就行了。

 // 打開輸入的 .doc 文件
 Document doc = wordApp.Documents.Open(docFile);
 // 獲取不帶擴(kuò)展名的文件名
 string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(docFile);
 // 將擴(kuò)展名改為.docx
 string docxFileName = Path.ChangeExtension(fileNameWithoutExtension, ".docx");
 string docxFilePath = Path.Combine(docxFolderPath, docxFileName);
 // 將 .doc 文件保存為 .docx 格式
 doc.SaveAs2(docxFilePath, WdSaveFormat.wdFormatXMLDocument);
 // 關(guān)閉 .doc 文件
 doc.Close();
 // 釋放 Document 對象的資源
 System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);

需要轉(zhuǎn)換的doc文件所在的文件夾:

軟件使用截圖:

實(shí)現(xiàn)效果:

實(shí)現(xiàn)了批量doc文件轉(zhuǎn)換為docx文件。

如果不熟悉C#也可以通過Python實(shí)現(xiàn)。

以下是一個文件轉(zhuǎn)換的示例代碼,經(jīng)過測試可行:

import os
import win32com.client
def convert_doc_to_docx(doc_path):
    # 創(chuàng)建Word應(yīng)用程序?qū)ο?/span>
    word = win32com.client.Dispatch("Word.Application")
    # 打開.doc文件
    doc = word.Documents.Open(doc_path)
    # 設(shè)置新的文件路徑
    docx_path = os.path.splitext(doc_path)[0] + ".docx"
    # 保存文件為.docx格式
    doc.SaveAs(docx_path, FileFormat=16)  # 16 represents wdFormatXMLDocument
    # 關(guān)閉文檔
    doc.Close()
    # 關(guān)閉Word應(yīng)用程序
    word.Quit()
# 使用函數(shù)
convert_doc_to_docx("Path")

由于時間精力有限,沒有寫成批量處理的形式。

還有一種方案就是在word里寫VBA。

采用哪種方案可以根據(jù)自己的熟練度。

轉(zhuǎn)自https://www.cnblogs.com/mingupupu/p/18085637


該文章在 2025/3/19 8:53:06 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場、車隊(duì)、財務(wù)費(fèi)用、相關(guān)報表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 国产在线视频 | 他扒开我小泬添我视频 | 国产乱子夫妻xx黑人xyx真爽 | 98视频在线 | 精品一区二区在线视 | 一区二区三区四 | 亚洲国产97视频在线 | 国产精品视频大陆精大陆 | 精品偷任你爽任你a | 老司机深夜免费福利 | 色色色setu | 日韩免费一区 | 国产亚洲精品午夜福利 | 日本成人大片一区二区 | 亚洲欧美中文字幕在线播放 | 东北老女人 | 你懂得视频在线 | 国产综合在线观看 | 福利在线观看 | 欧美一区二区三区四区国产另类 | 国产精品自拍一区 | 国产一区二区三区乱码在线观看 | 宅男66lu国产在线观看 | 国产超级乱婬视频免费 | 久爱www人成免费网站 | 日韩美女视频一区 | 99热这里只有精品国产首页 | 果冻传媒一区二区天美传媒 | 99ri视频一区二区三区 | 91青青国产在线观看免费 | 亚洲码在线观看 | 天美传媒、91制片厂、天美传媒 | 欧美精 | 国产乱人视频免费播放 | 精品亚洲欧美无人区乱码 | 久爱成疾在线视频播放 | 中文字幕亚洲第一 | 国产乱偷精品视频a人人澡 日韩免费在线观看视频 | 国产免费人成视频网站在线看 | 二区62| 成人免费网站又大又黄又粗 |