展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > C#代码实现设置Word表格的列宽

C#代码实现设置Word表格的列宽

探讨了在C#中设置Word表格列宽的两种方式:按百分比使表格自适应页面,按固定值保持结构稳定。通过Spire.Doc遍历行设置单元格宽度实现百分比或固定值控制,并介绍了OpenXMLSDK与Aspose.Words的替代方案。

本文目录

    表格列宽这事儿吧,别看它不起眼,其实直接影响着整个文档的“颜值”和阅读体验。特别是当你处理的内容比较多、数据比较杂的时候,一个合理的列宽设置,能避免一堆文字挤在一起让人看着头疼。Word 里主要就两种玩法:按百分比来,表格会自动适应页面大小,显得灵活;按固定值来,表格结构稳如泰山,适合那些对数据对齐有强迫症的场景。

    C#代码实现设置Word表格的列宽

    这篇文章就来聊聊,怎么在 C# 项目里搞定这件事。

    准备开发环境

    开工之前,你得先在 .NET 项目里把操作 Word 的家伙事儿给装上。要么直接下载 DLL 文件手动引用,要么用 NuGet 一键搞定,省心省力。

    PM> Install-Package Spire.Doc

    在 C# 中按百分比设置 Word 表格列宽

    想用百分比来管列宽,得先把表格的首选宽度类型改成百分比模式。举个例子,通过 Table.PreferredWidth = new PreferredWidth(WidthType.Percentage, (short)100) 这个操作,就能让表格宽度占满整个页面。然后,遍历每一列,你想给他们分多少百分比,自己说了算。

    具体步骤如下:

    1. 创建一个 Document 对象。
    2. 用 Document.LoadFromFile() 把 Word 文件拽进来。
    3. 通过 Document.Sections[0] 指定文档里的第一个节。
    4. 通过 Section.Tables[0] 定位到该节中的第一个表格。
    5. 用 for 循环把表格里的每一行都照顾到。
    6. 用 TableRow.Cells[index].SetCellWidth(value, CellWidthType.Percentage) 方法,给不同列的单元格分配百分比宽度。
    7. 最后用 Document.Sa veToFile() 把改好的文档存下来。

    完整示例代码如下:

    using Spire.Doc;
    
    namespace SpireDocDemo
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                // 创建一个新的 Document 对象
                Document doc = new Document();
    
                // 加载名为“Sample.docx”的文档
                doc.LoadFromFile("Sample.docx");
    
                // 获取文档中的第一个节
                Section section = doc.Sections[0];
    
                // 获取该节中的第一个表格
                Table table = (Table)section.Tables[0];
    
                // 创建 PreferredWidth 对象,将宽度类型设置为百分比,并将宽度值设置为 100%
                PreferredWidth percentageWidth = new PreferredWidth(WidthType.Percentage, (short)100);
    
                // 将表格的首选宽度设置为上述 PreferredWidth 对象
                table.PreferredWidth = percentageWidth;
    
                // 定义一个 TableRow 类型变量
                TableRow tableRow;
    
                // 遍历表格中的所有行
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    // 获取当前行
                    tableRow = table.Rows[i];
    
                    // 将第一列单元格宽度设置为 34%,宽度类型为百分比
                    tableRow.Cells[0].SetCellWidth(34, CellWidthType.Percentage);
    
                    // 将第二列单元格宽度设置为 33%,宽度类型为百分比
                    tableRow.Cells[1].SetCellWidth(33, CellWidthType.Percentage);
    
                    // 将第三列单元格宽度设置为 33%,宽度类型为百分比
                    tableRow.Cells[2].SetCellWidth(33, CellWidthType.Percentage);
                }
    
                // 保存修改后的文档,并指定文件格式为 Docx2016
                doc.Sa veToFile("set_column_width_by_percentage.docx", FileFormat.Docx2016);
    
                // 关闭文档
                doc.Close();
            }
        }
    }

    在 C# 中按固定值设置 Word 表格列宽

    要是想用固定值来控制,那得先把表格布局模式给锁死,也就是通过 Table.TableFormat.LayoutType = LayoutType.Fixed 来设置。设定好之后,再遍历每一列,想给个精确的宽度值,没问题。

    具体步骤如下:

    1. 创建一个 Document 对象。
    2. 用 Document.LoadFromFile() 加载 Word 文档。
    3. 通过 Document.Sections[0] 搞定第一个节。
    4. 通过 Section.Tables[0] 拿到第一个表格。
    5. 用 for 循环遍历所有行。
    6. 用 TableRow.Cells[index].SetCellWidth(value, CellWidthType.Point) 方法,为不同列设置固定宽度。这里的 value 单位是磅。
    7. 同样,Document.Sa veToFile() 保存文档。

    完整示例代码如下:

    using Spire.Doc;
    
    namespace SpireDocDemo
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                // 创建一个新的 Document 对象
                Document doc = new Document();
    
                // 加载文档
                doc.LoadFromFile("Sample.docx");
    
                // 获取文档中的第一个节
                Section section = doc.Sections[0];
    
                // 获取该节中的第一个表格
                Table table = (Table)section.Tables[0];
    
                // 将表格布局类型设置为固定
                table.Format.LayoutType = LayoutType.Fixed;
    
                // 获取左边距
                float leftMargin = section.PageSetup.Margins.Left;
    
                // 获取右边距
                float rightMargin = section.PageSetup.Margins.Right;
    
                // 计算页面宽度(减去左右边距)
                double pageWidth = section.PageSetup.PageSize.Width - leftMargin - rightMargin;
    
                // 定义一个 TableRow 类型变量
                TableRow tableRow;
    
                // 遍历表格中的所有行
                for (int i = 0; i < table.Rows.Count; i++)
                {
                    // 获取当前行
                    tableRow = table.Rows[i];
    
                    // 将第一列单元格宽度设置为页面宽度的 34%
                    tableRow.Cells[0].SetCellWidth((float)(pageWidth * 0.34), CellWidthType.Point);
    
                    // 将第二列单元格宽度设置为页面宽度的 33%
                    tableRow.Cells[1].SetCellWidth((float)(pageWidth * 0.33), CellWidthType.Point);
    
                    // 将第三列单元格宽度设置为页面宽度的 33%
                    tableRow.Cells[2].SetCellWidth((float)(pageWidth * 0.33), CellWidthType.Point);
                }
    
                // 保存修改后的文档,并指定文件格式为 Docx2016
                doc.Sa veToFile("set_column_width_to_fixed_value.docx", FileFormat.Docx2016);
    
                // 关闭文档
                doc.Close();
            }
        }
    }

    知识扩展

    其实在 C# 里折腾 Word 表格列宽,不同库的路数还真不一样。Spire.Doc 得遍历行去设置单元格,Open XML SDK 玩的是 GridColumn 元素,Aspose.Words 则直接给你提供了 PreferredWidth 属性。下面把这几个常见的方案都捋一遍。

    方案一:使用 Spire.Doc for .NET

    Spire.Doc 是商业库里的老面孔了,不用装 Office 就能在 .NET 环境下把 Word 文档安排得明明白白。

    示例代码:设置指定列的宽度

    using Spire.Doc;
    using Spire.Doc.Documents;
    // 1. 加载文档
    Document doc = new Document();
    doc.LoadFromFile("Sample.docx");
    // 2. 获取第一个表格
    Table table = (Table)doc.Sections[0].Tables[0];
    // 3. 设置表格首选宽度为 100%(百分比模式)
    table.PreferredWidth = new PreferredWidth(WidthType.Percentage, (short)100);
    // 4. 遍历所有行,设置列宽
    for (int i = 0; i < table.Rows.Count; i++)
    {
        // 第一列:固定宽度 200 磅(Point)
        table.Rows[i].Cells[0].SetCellWidth(200, CellWidthType.Point);
        // 第二列:宽度为表格宽度的 50%(百分比)
        table.Rows[i].Cells[1].SetCellWidth(50, CellWidthType.Percentage);
        // 第三列:固定宽度 150 磅
        table.Rows[i].Cells[2].SetCellWidth(150, CellWidthType.Point);
    }
    // 5. 保存文档
    doc.Sa veToFile("Result.docx", FileFormat.Docx);
    参数说明
    CellWidthType.Point以磅(Point)为单位设置固定宽度
    CellWidthType.Percentage以百分比为单位设置相对宽度

    注意:Spire.Doc 没有直接设置列宽的方法,只能曲线救国——遍历每一行,通过设置该行中对应单元格的宽度来实现列宽控制。

    方案二:使用 Open XML SDK(官方免费,适合服务端)

    Open XML SDK 是微软官方的免费库,不用装 Office,很适合在服务器上做批量文档处理。

    示例代码:操作 TableGrid 的 GridColumn

    using DocumentFormat.OpenXml.Packaging;
    using DocumentFormat.OpenXml.Wordprocessing;
    using (WordprocessingDocument doc = WordprocessingDocument.Open("Sample.docx", true))
    {
        // 获取文档主体中的第一个表格
        Table table = doc.MainDocumentPart.Document.Body.Descendants().First();
        // 获取或创建表格网格(TableGrid)
        TableGrid tableGrid = table.GetFirstChild();
        if (tableGrid == null)
        {
            tableGrid = new TableGrid();
            table.InsertAt(tableGrid, 0);
        }
        // 清空现有网格列
        tableGrid.RemoveAllChildren();
        // 定义各列宽度(单位:缇,1 磅 = 20 缇)
        int[] columnWidthsInTwips = new int[] { 4000, 2000, 3000 }; // 分别对应 200、100、150 磅
        foreach (int width in columnWidthsInTwips)
        {
            tableGrid.AppendChild(new GridColumn() { Width = width.ToString() });
        }
        doc.Sa ve();
    }
    
    
    关键点说明
    GridColumn.Width指定网格列的宽度,以二十分之一磅(Twips)为单位
    换算关系1 磅 = 20 缇,如 4000 缇 = 200 磅
    TableGrid定义表格的列结构,必须在设置列宽前存在

    方案三:使用 Aspose.Words for .NET

    Aspose.Words 是个功能全面的商业库,在表格格式化方面提供了更丰富的玩法。

    示例代码:设置单元格的首选宽度

    using Aspose.Words;
    using Aspose.Words.Tables;
    Document doc = new Document("Sample.docx");
    Table table = (Table)doc.GetChild(NodeType.Table, 0, true);
    // 遍历每一行,设置列宽
    foreach (Row row in table.Rows)
    {
        // 第一列:固定宽度 200 磅
        row.Cells[0].CellFormat.PreferredWidth = PreferredWidth.FromPoints(200);
        // 第二列:宽度为表格宽度的 50%
        row.Cells[1].CellFormat.PreferredWidth = PreferredWidth.FromPercent(50);
        // 第三列:固定宽度 150 磅
        row.Cells[2].CellFormat.PreferredWidth = PreferredWidth.FromPoints(150);
    }
    doc.Sa ve("Result.docx");
    方法说明
    PreferredWidth.FromPoints()设置固定宽度,单位为磅
    PreferredWidth.FromPercent()设置相对宽度,单位为百分比
    PreferredWidth.Auto自动调整宽度

    方案四:使用 Microsoft.Office.Interop.Word(需安装 Word)

    这个方案就比较直接了,它依赖本地安装的 Office Word,适用于 Windows 桌面端的应用。

    using Microsoft.Office.Interop.Word;
    Application wordApp = new Application();
    Document doc = wordApp.Documents.Open(@"C:Sample.docx");
    // 获取第一个表格
    Table table = doc.Tables[1];
    // 设置第一列宽度为 200 磅
    table.Columns[1].SetWidth(200, WdRulerStyle.wdAdjustNone);
    // 设置第二列宽度为 100 磅
    table.Columns[2].SetWidth(100, WdRulerStyle.wdAdjustNone);
    doc.Sa ve();
    doc.Close();
    wordApp.Quit();
    枚举值说明
    WdRulerStyle.wdAdjustNone仅调整指定列,不影响其他列
    WdRulerStyle.wdAdjustFirstColumn调整第一列
    WdRulerStyle.wdAdjustProportional按比例调整所有列
    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发 Word
    相关文章 更多
    精品专题 更多
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    IOS软件

    正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

    AI

    正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

    Mac软件 更多
    AirBuddy 3 macOS版
    AirBuddy 3 macOS版

    AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

    AirServer macOS版
    AirServer macOS版

    AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

    AnyDesk macOS版
    AnyDesk macOS版

    AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

    Beamer 4 macOS版
    Beamer 4 macOS版

    Beamer 4是面向macOS的本地视频投屏工具,可将Mac中的影片投放到Apple TV、Chromecast及兼容设备,支持常见格式、多类字幕、环绕声、播放列表和电视遥控操作。

    Boom 3D macOS版
    Boom 3D macOS版

    Boom 3D macOS版是一款系统级音效增强工具,可为音乐、电影、游戏和流媒体提供3D虚拟环绕声、31段均衡器、音量增强及应用独立音量控制,并支持本地播放器与多种音频输出设备。

    Boris FX macOS版
    Boris FX macOS版

    Boris FX macOS版是一套面向剪辑、合成、调色及动态图形工作的专业后期工具,涵盖视觉特效、平面与三维跟踪、转描、画面修复、粒子动画和音频清理,可配合多种主流宿主软件使用。

    Capto macOS版
    Capto macOS版

    Capto 是面向 macOS 的屏幕截图、高清录屏与媒体编辑工具,支持区域及整屏捕获、网页长截图、双音轨处理、图片和视频标注、素材分类与多渠道分享,适合教师、学生、内容创作者及需要制作演示教程的用户。

    ChemDraw macOS版
    ChemDraw macOS版

    ChemDraw macOS版是一款面向化学学习、科研和制药工作的专业结构绘图工具,可创建分子、反应及生物聚合物图形,并提供结构整理、格式转换和科研成果展示能力。

    Cursor Crane macOS版
    Cursor Crane macOS版

    Cursor Crane 是一款仅面向 macOS 的键盘操控效率工具,可通过提示标签、网格、文字查找和窗口模式完成点击、滚动、定位与切换,并支持屏幕内容提取、脚本及工作流扩展。

    Deep Freeze 冰点还原 macOS版
    Deep Freeze 冰点还原 macOS版

    Deep Freeze 冰点还原 macOS版通过冻结系统配置,让受保护的Mac在重新启动后回到预设状态,并提供解冻空间、维护计划、密码保护及Apple Remote Desktop管理能力。

    Focusky macOS版
    Focusky macOS版

    Focusky macOS版是一款面向教学课件、商务汇报、产品展示和动画宣传内容的演示制作工具。它通过无限画布、路径编排、缩放旋转转场及多媒体编辑,将传统逐页幻灯片转化为更具空间感的动态演示。

    Folder Colorizer 2 macOS版
    Folder Colorizer 2 macOS版

    Folder Colorizer 2 macOS版是一款直观的文件夹外观定制工具,可更换颜色,添加表情、贴纸及图片背景,并支持批量处理、智能推荐和恢复默认样式,帮助用户更快辨认工作、学习与生活资料。

    WINDOWS 更多
    StarUML 7 Windows版
    StarUML 7 Windows版

    StarUML 7 Windows版是一款面向软件工程、系统分析与架构设计的专业建模工具,支持UML 2、ERD、流程图、数据流图和C4模型等,可用于需求梳理、系统设计、模型验证、文档发布及代码生成。

    Fender Studio Pro(原Studio One)Windows版
    Fender Studio Pro(原Studio One)Windows版

    Fender Studio Pro(原Studio One)Windows版是一套专业数字音频工作站,可完成录音、编曲、混音、母带处理与现场演出。 新版本延续Studio One的核心工作流,并加入Fender音箱与效果建模、智能创作和更现代的制作界面。

    think cell Windows版
    think cell Windows版

    think-cell Windows版是一款集成于Microsoft PowerPoint和Excel的商业演示增强插件,提供瀑布图、甘特图、Mekko图、数据联动、自动标注及智能排版功能,适合咨询、金融、项目管理和企业汇报场景。

    TotalFX Windows版
    TotalFX Windows版

    TotalFX Windows版是一套面向剪辑师与内容创作者的视频后期插件合集,将动态字幕、转场、稳定、绿幕抠像、滤镜及色彩校正等能力整合到常用非线性编辑软件中,适合宣传片、短视频、栏目包装和影视项目制作。

    UltraEdit Windows版
    UltraEdit Windows版

    UltraEdit Windows版是一款面向开发者、数据人员和系统管理员的专业编辑器,支持文本、源代码、十六进制及超大文件处理,并提供多光标、列模式、正则搜索、脚本自动化和FTP远程编辑等工具。

    Xmanager Windows版
    Xmanager Windows版

    Xmanager Windows版是一款面向开发、运维及科研人员的PC X服务器,可连接Linux或UNIX主机,在Windows中运行完整远程桌面或单个X应用,并集中管理XDMCP、SSH、RDP与VNC会话。

    作曲大师 Windows版
    作曲大师 Windows版

    作曲大师 Windows版是一款面向简谱录入、曲谱排版、播放试听和音乐教学的中文制谱工具。麦软网所列简谱标准版支持最多16个声部,并提供曲库下载等实用功能,适合制作普通歌谱、课堂谱例及练习资料。

    失易得 Windows版
    失易得 Windows版

    失易得 Windows 版是一款面向误删除、误格式化、分区丢失及回收站清空等情况的数据恢复工具,可扫描电脑硬盘、移动硬盘、U盘和存储卡,并通过预览、筛选和深度扫描帮助用户判断文件是否值得恢复。

    AppScan Windows版
    AppScan Windows版

    AppScan Windows版是一款面向Web应用和API的动态应用安全测试工具,可自动探索站点、执行漏洞测试、按风险级别整理问题,并提供验证信息、修复建议与合规报告,适合安全测试、开发整改及上线前审计。

    IntelliJ IDEA Windows版
    IntelliJ IDEA Windows版

    JetBrains IntelliJ IDEA 是以 Java、Kotlin 和 JVM 项目为核心的专业集成开发环境,提供智能补全、代码检查、安全重构、调试、测试、版本控制及构建工具集成。统一发行版的核心功能可免费用于商业和非商业项目,

    PhpStorm Windows版
    PhpStorm Windows版

    PhpStorm 是 JetBrains 面向 PHP 与现代 Web 开发打造的专业集成开发环境,提供代码补全、静态检查、重构、调试、测试、数据库、版本控制及前端语言支持。Windows 用户可直接下载安装程序,

    PyCharm Windows版
    PyCharm Windows版

    PyCharm 是 JetBrains 推出的 Python 集成开发环境,提供智能代码补全、错误检查、重构、调试、测试、Git、终端及 Jupyter Notebook 支持。统一版安装后可体验 30 天 Pro 功能,