最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#高效實現(xiàn)Word轉(zhuǎn)Excel并完整保留文本,表格與樣式

 更新時間:2025年12月23日 08:19:49   作者:LSTM97  
在企業(yè)辦公和文檔自動化場景中,Word 和 Excel 是最常用的兩種文檔格式。Word 更適合撰寫說明性文本和排版復(fù)雜的內(nèi)容,而 Excel 則擅長結(jié)構(gòu)化數(shù)據(jù)處理、統(tǒng)計與分析。在實際開發(fā)中,我們經(jīng)常

在企業(yè)辦公和文檔自動化場景中,Word 和 Excel 是最常用的兩種文檔格式。Word 更適合撰寫說明性文本和排版復(fù)雜的內(nèi)容,而 Excel 則擅長結(jié)構(gòu)化數(shù)據(jù)處理、統(tǒng)計與分析。在實際開發(fā)中,我們經(jīng)常會遇到這樣的需求: 將 Word 文檔中的內(nèi)容(包括段落、表格、樣式甚至圖片)轉(zhuǎn)換為 Excel 文件,以便后續(xù)分析或存檔 。

本文將介紹如何使用 Spire.Doc for .NETSpire.XLS for .NET ,通過 C# 實現(xiàn)一個較為完整的 Word 轉(zhuǎn) Excel 方案,并盡可能保留原有的文本樣式、表格結(jié)構(gòu)和圖片內(nèi)容。

實現(xiàn)思路概述

Word 文檔的內(nèi)容結(jié)構(gòu)相對復(fù)雜,主要由以下幾類對象組成:

  • 段落(Paragraph)
  • 表格(Table)
  • 文本范圍(TextRange)
  • 圖片(DocPicture)

而 Excel 的核心結(jié)構(gòu)則是:

  • 工作簿(Workbook)
  • 工作表(Worksheet)
  • 單元格(CellRange)
  • 富文本(RichText)

因此,轉(zhuǎn)換的基本思路是:

  • 讀取 Word 文檔;
  • 遍歷文檔中的 Section;
  • 按順序處理段落和表格;
  • 將段落內(nèi)容寫入 Excel 單元格;
  • 將 Word 表格逐行、逐列映射到 Excel;
  • 復(fù)制文本樣式、對齊方式和圖片。

加載 Word 并創(chuàng)建 Excel 工作簿

程序首先創(chuàng)建 Document 對象并加載 Word 文件,然后創(chuàng)建一個 Workbook,并清除默認工作表,確保輸出結(jié)果更加干凈、可控。

Document doc = new Document();
doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Invoice.docx");

Workbook wb = new Workbook();
wb.Worksheets.Clear();
Worksheet worksheet = wb.CreateEmptySheet("WordToExcel");

通過這種方式,我們可以確保 Word 的內(nèi)容被統(tǒng)一寫入到一個指定的工作表中。

遍歷 Word 文檔內(nèi)容

Word 文檔可能包含多個 Section,每個 Section 中又包含段落和表格。代碼通過雙層循環(huán)依次讀取這些對象:

  • 如果是段落(Paragraph),直接寫入 Excel 的單個單元格;
  • 如果是表格(Table),則調(diào)用專門的方法導(dǎo)出為多行多列。
foreach (Section section in doc.Sections)
{
    foreach (DocumentObject documentObject in section.Body.ChildObjects)
    {
        if (documentObject is Paragraph)
        {
            // 寫入段落
        }
        if (documentObject is Table)
        {
            // 導(dǎo)出表格
        }
    }
}

這樣可以最大程度保持 Word 中原有內(nèi)容的順序。

導(dǎo)出 Word 表格到 Excel

對于 Word 表格,程序逐行遍歷 TableRow,再逐列遍歷 TableCell,并將內(nèi)容寫入 Excel 對應(yīng)的單元格中。同時,為了讓 Excel 看起來更清晰,還為每個單元格添加了邊框:

cell.BorderAround(LineStyleType.Thin, Color.Black);

表格中的文本、換行符以及樣式都會被完整復(fù)制,確保數(shù)據(jù)的可讀性。

復(fù)制文本樣式與圖片

這是整個轉(zhuǎn)換過程中的核心部分。程序通過 RichText 對象,將 Word 中不同 TextRange 的字體名稱、字號、顏色、加粗狀態(tài)逐一映射到 Excel:

  • 字體名稱(FontName)
  • 字號(FontSize)
  • 是否加粗(Bold)
  • 字體顏色(TextColor)

同時,如果在段落中檢測到圖片(DocPicture),會直接將圖片插入到 Excel 對應(yīng)的單元格位置,并根據(jù)圖片高度自動調(diào)整行高,從而避免圖片被遮擋。

對齊方式與格式優(yōu)化

為了進一步提升轉(zhuǎn)換質(zhì)量,代碼還處理了段落的對齊方式,將 Word 中的左對齊、居中、右對齊映射到 Excel 單元格樣式中。此外,在所有內(nèi)容寫入完成后,還統(tǒng)一執(zhí)行了以下操作:

  • 自動調(diào)整行高和列寬
  • 啟用單元格自動換行

這一步能顯著提升生成 Excel 文件的整體可讀性。

保存為 Excel 文件

最后,將生成的工作簿保存為 Excel 2013 格式文件:

wb.SaveToFile("WordToExcel.xlsx", ExcelVersion.Version2013);

至此,一個包含段落、表格、樣式和圖片的 Excel 文件就成功生成了。

完整示例代碼(C# 將 Word 轉(zhuǎn)換為 Excel)

using Spire.Doc;
using Spire.Doc.Documents;
using Spire.Doc.Fields;
using Spire.Xls;
using System;
using System.Drawing;

namespace ConvertWordToExcel
{
    class Program
    {
        static void Main(string[] args)
        {
            // 創(chuàng)建 Document 對象
            Document doc = new Document();

            // 加載 Word 文檔
            doc.LoadFromFile(@"C:\Users\Administrator\Desktop\Invoice.docx");

            // 創(chuàng)建 Workbook 對象
            Workbook wb = new Workbook();

            // 移除默認工作表
            wb.Worksheets.Clear();

            // 創(chuàng)建一個名為“WordToExcel”的工作表
            Worksheet worksheet = wb.CreateEmptySheet("WordToExcel");

            int row = 1;
            int column = 1;

            // 遍歷 Word 文檔中的所有 Section
            foreach (Section section in doc.Sections)
            {
                // 遍歷 Section 中的所有文檔對象
                foreach (DocumentObject documentObject in section.Body.ChildObjects)
                {
                    // 如果對象是段落
                    if (documentObject is Paragraph)
                    {
                        CellRange cell = worksheet.Range[row, column];
                        Paragraph paragraph = documentObject as Paragraph;

                        // 將段落內(nèi)容及樣式復(fù)制到 Excel 單元格
                        CopyTextAndStyle(cell, paragraph);
                        row++;
                    }

                    // 如果對象是表格
                    if (documentObject is Table)
                    {
                        Table table = documentObject as Table;

                        // 將 Word 表格導(dǎo)出到 Excel
                        int currentRow = ExportTableInExcel(worksheet, row, table);
                        row = currentRow;
                    }
                }
            }

            // 自動調(diào)整行高和列寬
            worksheet.AllocatedRange.AutoFitRows();
            worksheet.AllocatedRange.AutoFitColumns();

            // 設(shè)置單元格自動換行
            worksheet.AllocatedRange.IsWrapText = true;

            // 保存為 Excel 文件
            wb.SaveToFile("WordToExcel.xlsx", ExcelVersion.Version2013);
        }

        /// <summary>
        /// 將 Word 表格數(shù)據(jù)導(dǎo)出到 Excel
        /// </summary>
        private static int ExportTableInExcel(Worksheet worksheet, int row, Table table)
        {
            CellRange cell;
            int column;

            // 遍歷表格中的每一行
            foreach (TableRow tbRow in table.Rows)
            {
                column = 1;

                // 遍歷當(dāng)前行中的每一個單元格
                foreach (TableCell tbCell in tbRow.Cells)
                {
                    cell = worksheet.Range[row, column];

                    // 為 Excel 單元格添加邊框
                    cell.BorderAround(LineStyleType.Thin, Color.Black);

                    // 復(fù)制 Word 表格單元格內(nèi)容到 Excel
                    CopyContentInTable(tbCell, cell);
                    column++;
                }
                row++;
            }
            return row;
        }

        /// <summary>
        /// 將 Word 表格單元格中的內(nèi)容復(fù)制到 Excel 單元格
        /// </summary>
        private static void CopyContentInTable(TableCell tbCell, CellRange cell)
        {
            // 創(chuàng)建一個新的段落對象
            Paragraph newPara = new Paragraph(tbCell.Document);

            // 遍歷 Word 表格單元格中的所有子對象
            for (int i = 0; i < tbCell.ChildObjects.Count; i++)
            {
                DocumentObject documentObject = tbCell.ChildObjects[i];

                if (documentObject is Paragraph)
                {
                    Paragraph paragraph = documentObject as Paragraph;

                    // 復(fù)制段落中的所有子對象(文本、圖片等)
                    foreach (DocumentObject cObj in paragraph.ChildObjects)
                    {
                        newPara.ChildObjects.Add(cObj.Clone());
                    }

                    // 如果不是最后一個段落,則添加換行符
                    if (i < tbCell.ChildObjects.Count - 1)
                    {
                        newPara.AppendText("\n");
                    }
                }
            }

            // 將合并后的段落內(nèi)容復(fù)制到 Excel
            CopyTextAndStyle(cell, newPara);
        }

        /// <summary>
        /// 復(fù)制段落的文本內(nèi)容和樣式到 Excel 單元格
        /// </summary>
        private static void CopyTextAndStyle(CellRange cell, Paragraph paragraph)
        {
            RichText richText = cell.RichText;

            // 設(shè)置單元格文本內(nèi)容
            richText.Text = paragraph.Text;

            int startIndex = 0;

            // 遍歷段落中的子對象
            foreach (DocumentObject documentObject in paragraph.ChildObjects)
            {
                // 如果是文本內(nèi)容
                if (documentObject is TextRange)
                {
                    TextRange textRange = documentObject as TextRange;

                    // 獲取 Word 文本樣式
                    string fontName = textRange.CharacterFormat.FontName;
                    bool isBold = textRange.CharacterFormat.Bold;
                    Color textColor = textRange.CharacterFormat.TextColor;
                    float fontSize = textRange.CharacterFormat.FontSize;
                    string textRangeText = textRange.Text;
                    int strLength = textRangeText.Length;

                    // 創(chuàng)建 Excel 字體
                    ExcelFont font = cell.Worksheet.Workbook.CreateFont();
                    font.Color = textColor;
                    font.IsBold = isBold;
                    font.Size = fontSize;
                    font.FontName = fontName;

                    // 應(yīng)用字體樣式到指定文本范圍
                    int endIndex = startIndex + strLength;
                    richText.SetFont(startIndex, endIndex, font);
                    startIndex += strLength;
                }

                // 如果是圖片
                if (documentObject is DocPicture)
                {
                    DocPicture picture = documentObject as DocPicture;

                    // 將圖片插入到 Excel 單元格
                    cell.Worksheet.Pictures.Add(cell.Row, cell.Column, picture.Image);

                    // 根據(jù)圖片高度調(diào)整行高
                    cell.Worksheet.SetRowHeightInPixels(cell.Row, 1, picture.Image.Height);
                }
            }

            // 設(shè)置 Excel 單元格的水平對齊方式
            switch (paragraph.Format.HorizontalAlignment)
            {
                case HorizontalAlignment.Left:
                    cell.Style.HorizontalAlignment = HorizontalAlignType.Left;
                    break;
                case HorizontalAlignment.Center:
                    cell.Style.HorizontalAlignment = HorizontalAlignType.Center;
                    break;
                case HorizontalAlignment.Right:
                    cell.Style.HorizontalAlignment = HorizontalAlignType.Right;
                    break;
            }
        }
    }
}

總結(jié)

通過本文示例可以看出,借助 Spire.Doc for .NETSpire.XLS for .NET ,我們可以使用 C# 高效地實現(xiàn) Word 到 Excel 的轉(zhuǎn)換,并且在轉(zhuǎn)換過程中:

  • 保留文本內(nèi)容與順序
  • 還原字體樣式和對齊方式
  • 完整導(dǎo)出表格結(jié)構(gòu)
  • 支持圖片復(fù)制

這種方案非常適合用于 發(fā)票轉(zhuǎn)換、報表整理、文檔數(shù)據(jù)結(jié)構(gòu)化處理 等場景。如果你正在開發(fā)文檔自動化或企業(yè)級辦公系統(tǒng),這種 Word 轉(zhuǎn) Excel 的實現(xiàn)方式將具有很高的實用價值。

以上就是C#高效實現(xiàn)Word轉(zhuǎn)Excel并完整保留文本,表格與樣式的詳細內(nèi)容,更多關(guān)于C# Word轉(zhuǎn)Excel的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用C#代碼創(chuàng)建快捷方式文件詳解

    如何使用C#代碼創(chuàng)建快捷方式文件詳解

    在Windows中創(chuàng)建快捷方式很簡單,如果想用C#代碼的方式創(chuàng)建,就沒有那么方便了,因為.NET框架沒有提供直接創(chuàng)建快捷方式的方法。這篇文章主要給大家介紹了關(guān)于如何使用C#代碼創(chuàng)建快捷方式文件的相關(guān)資料,需要的朋友可以參考下
    2018-08-08
  • C#異常捕獲機制圖文詳解

    C#異常捕獲機制圖文詳解

    在本文中我們給大家分享了關(guān)于C#異常捕獲機制的相關(guān)知識點內(nèi)容,有興趣的朋友們學(xué)習(xí)下。
    2019-02-02
  • C#的四個基本技巧

    C#的四個基本技巧

    C#的四個基本技巧...
    2007-03-03
  • C#設(shè)置右鍵菜單的方法

    C#設(shè)置右鍵菜單的方法

    這篇文章主要介紹了C#設(shè)置右鍵菜單的方法,實例分析了C#設(shè)置右鍵菜單的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • C# Newtonsoft.Json 解析多嵌套json 進行反序列化的實例

    C# Newtonsoft.Json 解析多嵌套json 進行反序列化的實例

    這篇文章主要介紹了C# Newtonsoft.Json 解析多嵌套json 進行反序列化的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • C#使用NPOI對Excel數(shù)據(jù)進行導(dǎo)入導(dǎo)出

    C#使用NPOI對Excel數(shù)據(jù)進行導(dǎo)入導(dǎo)出

    這篇文章介紹了C#使用NPOI對Excel數(shù)據(jù)進行導(dǎo)入導(dǎo)出的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06
  • 你是不是這樣寫異常處理代碼的呢?

    你是不是這樣寫異常處理代碼的呢?

    本篇文章是對,你是不是這樣寫異常處理代碼的進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C#編寫的Base64加密和解密類

    C#編寫的Base64加密和解密類

    本文給大家匯總介紹了幾種C#編寫的Base64加密和解密類的代碼,從簡單到復(fù)雜,都能夠?qū)崿F(xiàn)功能,有需要的小伙伴根據(jù)自己的項目需求參考下吧。
    2015-05-05
  • C#四舍五入(函數(shù))用法實例

    C#四舍五入(函數(shù))用法實例

    這篇文章主要介紹了C#四舍五入(函數(shù))用法實例,有需要的朋友可以參考一下
    2013-11-11
  • C#中事務(wù)處理和非事務(wù)處理方法實例分析

    C#中事務(wù)處理和非事務(wù)處理方法實例分析

    這篇文章主要介紹了C#中事務(wù)處理和非事務(wù)處理方法,較為詳細的分析了C#中事務(wù)處理與非事務(wù)處理的使用技巧,對于使用C#進行數(shù)據(jù)庫程序開發(fā)有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07

最新評論

芷江| 富蕴县| 肥东县| 凤凰县| 镇远县| 会昌县| 开阳县| 姜堰市| 咸阳市| 博湖县| 汶川县| 正宁县| 贵州省| 岗巴县| 云南省| 东乡县| 永兴县| 桐庐县| 株洲县| 浦县| 邯郸市| 江永县| 诏安县| 淮滨县| 玛沁县| 肇州县| 科技| 阿鲁科尔沁旗| 林口县| 永年县| 康定县| 新宁县| 临武县| 乌拉特前旗| 镇康县| 哈巴河县| 奉化市| 扶绥县| 肇东市| 梨树县| 安仁县|