<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

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

      前言

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

      背景

      doc文件是什么?

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

      docx文件是什么?

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

      為什么要將doc文件轉化為docx文件?

      將 ".doc" 文件轉換為 ".docx" 文件的主要原因包括:

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

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

      實踐

      方案使用C#通過Microsoft Office Interop實現將.doc文件轉換為.docx文件。

      添加引用:

      image-20240313204705350

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

      頁面設計如下所示:

      image-20240319211338214

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

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

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

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

      開始轉換按鈕事件處理函數:

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

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

      DocToDocx方法如下所示:

        public async System.Threading.Tasks.Task DocToDocx()
        {
            // 使用Task.Run來啟動一個新的異步任務
            await System.Threading.Tasks.Task.Run(() =>
            {
                // 創建 Word 應用程序實例
                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);
      
                    // 獲取不帶擴展名的文件名
                    string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(docFile);
      
                    // 將擴展名改為.docx
                    string docxFileName = Path.ChangeExtension(fileNameWithoutExtension, ".docx");
      
                    string docxFilePath = Path.Combine(docxFolderPath, docxFileName);
      
                    // 將 .doc 文件保存為 .docx 格式
                    doc.SaveAs2(docxFilePath, WdSaveFormat.wdFormatXMLDocument);
      
                    // 關閉 .doc 文件
                    doc.Close();
      
                    // 釋放 Document 對象的資源
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
      
                    // 使用Invoke方法來更新richTextBox1
                    richTextBox1.Invoke((Action)(() =>
                    {
                        richTextBox1.Text += $"第{i}個文件:{docFile}轉換完成 {DateTime.Now}\r\n";
      
                        // 設置插入點到文本的最后
                        richTextBox1.SelectionStart = richTextBox1.Text.Length;
      
                        // 滾動到插入點
                        richTextBox1.ScrollToCaret();
                    }));
      
                    i++;
                }
      
                // 退出 Word 應用程序
                wordApp.Quit();
      
                // 釋放資源
                System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
           
                // 使用Invoke方法來更新richTextBox1
                richTextBox1.Invoke((Action)(() =>
                {
                    richTextBox1.Text += $"轉換完成 {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)
            {
                // 返回當前文件
                yield return file;
            }
        }
      

      這里使用了yield關鍵字,使用yield的好處如下:

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

      實現原理其實很簡單,就是用新版本的word打開再保存就行了。

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

      需要轉換的doc文件所在的文件夾:

      image-20240320160856832

      軟件使用截圖:

      image-20240320163426589

      實現效果:

      image-20240320163450275

      實現了批量doc文件轉換為docx文件。

      如果不熟悉C#也可以通過Python實現。

      以下是一個文件轉換的示例代碼,經過測試可行:

      import os
      import win32com.client
      
      def convert_doc_to_docx(doc_path):
          # 創建Word應用程序對象
          word = win32com.client.Dispatch("Word.Application")
      
          # 打開.doc文件
          doc = word.Documents.Open(doc_path)
      
          # 設置新的文件路徑
          docx_path = os.path.splitext(doc_path)[0] + ".docx"
      
          # 保存文件為.docx格式
          doc.SaveAs(docx_path, FileFormat=16)  # 16 represents wdFormatXMLDocument
      
          # 關閉文檔
          doc.Close()
      
          # 關閉Word應用程序
          word.Quit()
      
      # 使用函數
      convert_doc_to_docx("Path")
      

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

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

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

      posted @ 2024-03-20 16:59  mingupupup  閱讀(2082)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 日韩午夜福利片段在线观看| 中文字幕日韩精品有码| 日韩一区二区三区亚洲一| 国产成人av电影在线观看第一页| 国产乱码精品一区二三区| 巨熟乳波霸若妻在线播放| 日韩有码av中文字幕| 国产综合内射日韩久| 亚洲中文字幕精品久久| 无码免费大香伊蕉在人线国产 | 国产情侣激情在线对白| 亚洲成人资源在线观看| 久99久热免费视频播放| 亚洲中文久久久精品无码| 国产v亚洲v天堂无码久久久| 国产亚洲一本大道中文在线| 国产中文字幕精品在线| 中文字幕人妻不卡精品| 亚洲综合视频一区二区三区| 草草浮力影院| 国产精品一区 在线播放| 小污女小欲女导航| 亚洲v欧美v日韩v国产v| 国产精品高清一区二区三区| 亚洲人成电影网站 久久影视| 久久人妻精品白浆国产| 精品无码av无码免费专区| 日本真人做爰免费视频120秒| 中年国产丰满熟女乱子正在播放| 亚洲综合一区二区三区不卡| 中文字幕无码av波多野吉衣| 亚洲老熟女一区二区三区| 婷婷久久综合九色综合88| 国产无遮挡又黄又爽高潮| 国产成人高清亚洲综合| 亚洲高清最新AV网站| 亚洲国产精品老熟女乱码| 九九电影网午夜理论片| 精品国产中文字幕av| 色综合色综合综合综合综合| 国产精品99精品久久免费|