c#word文档:3.向Word文档中插入表格/4.读取Word文档中表格

news2024/10/5 17:21:05
 --向Word文档中插入表格--

(1)在OfficeOperator项目的WordOperator类中定义向Word文档插入换页的函数NewPage

(2)在WordOperator类中定义向Word文档插入表格的函数InsertTable

using Microsoft.Office.Interop.Word;// 引入Microsoft.Office.Interop.Word命名空间
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace OfficeOperator1
{
    public class WordOperator1
    {
        
        //为WordOperator1声明两个操作Word文档的私有对象
            Application WordApp;                                   //Word应用对象
            Document WordDoc;                                      //Word文档对象
            public WordOperator1()  //在WordOperator1的构造函数中创建WordApp
            {
                WordApp = new Application();                           //创建Word应用对象
                WordApp.Visible = true;                                //创建完成后是否显示Word文档
            }
            //定义用于创建Word文档的函数CreateWord,代码如下:
            public void CreateWord()//创建Word文档
        {
                WordDoc = WordApp.Documents.Add();                                     //创建Word文档对象
                WordDoc.PageSetup.Orientation = WdOrientation.wdOrientPortrait;        //横板还是竖板
                WordDoc.PageSetup.LeftMargin = WordApp.CentimetersToPoints(0.5f);      //左边距
                WordDoc.PageSetup.RightMargin = WordApp.CentimetersToPoints(0.5f);     //右边距
                WordDoc.PageSetup.TopMargin = WordApp.CentimetersToPoints(0.5f);       //上边距
                WordDoc.PageSetup.BottomMargin = WordApp.CentimetersToPoints(0.5f);    //下边距
                WordDoc.PageSetup.PageWidth = 400;                                     //页宽,单位:像素
                WordDoc.PageSetup.PageHeight = 600;                                    //页高,单位:像素
            }

        public void SaveWord(string fileName)//文档保存
        {
            object FileName = fileName;                            //文档名称
            object FileFormat = WdSaveFormat.wdFormatDocument;     //Word文档保存格式
            object LockComments = false;                           //是否锁定批注
            object Password = "";                                  //打开Word文档密码
            object WritePassword = "";                             //修改Word文档密码
            object AddToRecentFiles = true;                       //是否将文档添加到近期使用的文件菜单中
            WordDoc.SaveAs(ref FileName, ref FileFormat, ref LockComments, ref Password, ref AddToRecentFiles, ref WritePassword);        //保存Word文档
        }
        public void QuitWord()//关闭Word文档
        {
            ((_Document)WordDoc).Close();                          //关闭Word文档
            ((_Application)WordApp).Quit();                        //退出Word应用
        }
        //退出Word应用程序
        public void SetPageHeader(string Text)//页眉中添加文字
        {
            WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;     //设置视图类型
            WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryHeader;//选定页眉
            WordApp.ActiveWindow.ActivePane.Selection.InsertAfter(Text);//向页眉中添加文字
            WordApp.Selection.ParagraphFormat.Alignment =                          //设置居中对齐
                WdParagraphAlignment.wdAlignParagraphCenter;
            WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument;//选定主文档
        }
        public void SetPageFooter(string Text)//页脚中添加文字
        {
            WordApp.ActiveWindow.View.Type = WdViewType.wdOutlineView;     //设置视图类型
            WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekPrimaryFooter;//选定页脚
            WordApp.ActiveWindow.ActivePane.Selection.InsertAfter(Text);   //向页脚中添加文字
            WordApp.Selection.ParagraphFormat.Alignment =                  //设置居中对齐
                WdParagraphAlignment.wdAlignParagraphCenter;
            WordApp.ActiveWindow.View.SeekView = WdSeekView.wdSeekMainDocument; //选定主文档
        }
        /// <summary>
        /// 设置页码
        /// </summary>
        /// <param name="isFirstPage"></param>
        public void InsertPageNumber(bool isFirstPage)
        {
            object Alignment = WdPageNumberAlignment.wdAlignPageNumberRight;//页码对齐方式
            object IsFirstPage = isFirstPage;                                      //是否从首页开始
                                                                                   //对所有的页眉和页脚设置页码
            WdHeaderFooterIndex WdFooterIndex = WdHeaderFooterIndex.wdHeaderFooterPrimary;
            WordApp.Selection.Sections[1].Footers[WdFooterIndex].PageNumbers.Add
                           (ref Alignment, ref IsFirstPage);
        }
        /// <summary>
        /// Word文档添加文字
        /// </summary>
        /// <param name="Text"></param>
        /// <param name="FontSize"></param>
        /// <param name="FontColor"></param>
        /// <param name="FontBold"></param>
        /// <param name="TextAlignment"></param>
        /// <param name="FontName"></param>
        public void InsertText(string Text, int FontSize, WdColor FontColor, int FontBold,
            WdParagraphAlignment TextAlignment, string FontName)
        {
            WordApp.Application.Selection.Font.Size = FontSize;            //字体大小
            WordApp.Application.Selection.Font.Bold = FontBold;            //是否粗体,0-否,1-是
            WordApp.Application.Selection.Font.Color = FontColor;          //字体颜色
            WordApp.Application.Selection.ParagraphFormat.Alignment = TextAlignment;    //字体排布
            WordApp.Application.Selection.Font.Name = FontName;            //字体名称
            WordApp.Application.Selection.TypeText(Text);                  //文字内容
        }
        /// <summary>
        /// 换行
        /// </summary>
        public void NewLine()
        {
            WordApp.Application.Selection.TypeParagraph();                 //换行
        }
        /// <summary>
        /// 向Word文档中插入图片
        /// </summary>
        /// <param name="FileName"></param>
        /// <param name="Width"></param>
        /// <param name="Height"></param>
        public void InsertPicture(string FileName, int Width, int Height)
        {
            object LinkToFile = false;                                     //是否连接到文件
            object SaveWithDocument = true;                                //是否保存到文档中
            object Range = System.Reflection.Missing.Value;
            WordApp.Selection.ParagraphFormat.Alignment =                  //设置段落对齐方式
                WdParagraphAlignment.wdAlignParagraphCenter;
            InlineShape inlineShape = WordDoc.Application.Selection.InlineShapes.
                AddPicture(FileName, ref LinkToFile, ref SaveWithDocument, ref Range);  //添加图片
            if (Width != 0 || Height != 0)
            {
                inlineShape.Width = Width;                                 //设置图像宽度
                inlineShape.Height = Height;                               //设置图像高度
            }
        }
        /// <summary>
        /// 换页
        /// </summary>
        public void NewPage()
        {
            object BreakType = WdBreakType.wdSectionBreakNextPage;         //换页
            WordDoc.Application.Selection.InsertBreak(ref BreakType);      //插入换页
        }
        /// <summary>
        /// 添加表格
        /// </summary>
        /// <param name="dataSet"></param>
        public void InsertTable(DataSet dataSet)
        {
            WordDoc.Tables.Add(WordApp.Selection.Range,                    //添加表格
                dataSet.Tables[0].Rows.Count, dataSet.Tables[0].Columns.Count);
            WordDoc.Tables[1].Rows.HeightRule = WdRowHeightRule.wdRowHeightAtLeast;    //行高规则
            WordDoc.Tables[1].Rows.Height = WordApp.CentimetersToPoints(0.8f);//设置行高
            WordDoc.Tables[1].Range.Font.Size = 10;                        //设置字体大小
            WordDoc.Tables[1].Range.Font.Name = "宋体";                      //设置字体类型
            WordDoc.Tables[1].Range.ParagraphFormat.Alignment =            //设置段落对齐
                WdParagraphAlignment.wdAlignParagraphCenter;
            WordDoc.Tables[1].Range.Cells.VerticalAlignment =              //设置表格元素垂直对齐
                 WdCellVerticalAlignment.wdCellAlignVerticalCenter;
            WordDoc.Tables[1].Borders[WdBorderType.wdBorderLeft].LineStyle =  //设置左边框
                WdLineStyle.wdLineStyleDouble;
            WordDoc.Tables[1].Borders[WdBorderType.wdBorderRight].LineStyle = //设置右边框
                WdLineStyle.wdLineStyleDouble;
            WordDoc.Tables[1].Borders[WdBorderType.wdBorderTop].LineStyle =   //设置上边框
            WdLineStyle.wdLineStyleDouble;
            WordDoc.Tables[1].Borders[WdBorderType.wdBorderBottom].LineStyle = //设置下边框
                WdLineStyle.wdLineStyleDouble;
            WordDoc.Tables[1].Borders[WdBorderType.wdBorderHorizontal].LineStyle =  //设置水平边框
                WdLineStyle.wdLineStyleSingle;
            WordDoc.Tables[1].Borders[WdBorderType.wdBorderVertical].LineStyle =   //设置垂直边框
                WdLineStyle.wdLineStyleSingle;
            //将数据集中的数据填充到表格中
            for (int i = 1; i <= dataSet.Tables[0].Rows.Count; i++)
            {
                for (int j = 1; j <= dataSet.Tables[0].Columns.Count; j++)
                {
                    WordDoc.Tables[1].Cell(i, j).Range.Text = dataSet.Tables[0].Rows[i - 1][j - 1].ToString();
                }
            }
        }


    }
    }

 (3)将数据库中的学生信息表添加到Word文档中。在CreateWord项目的main函数中添加代码如下:

SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM student_info", 
         "Data Source=.\\SQLEXPRESS;Initial Catalog=student;Integrated Security=True");
     DataSet dataSet = new DataSet();
     adapter.Fill(dataSet);                                                     //填充数据集
     word.InsertTable(dataSet);                                         //插入表格

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Office.Interop.Word;
using OfficeOperator1;

namespace CreateWord1
{    internal class Program
    {
        static void Main(string[] args)
        {
            WordOperator1 word = new WordOperator1();
            word.CreateWord();         //创建Word文档

            word.SetPageHeader("C#经典实例");                                  //添加页眉
            word.SetPageFooter("第17章  访问office");                           //添加页脚
            word.InsertPageNumber(true);                                          //添加页码

            word.InsertText("Word文档创建成功!", 16, WdColor.wdColorBlack, 1,
        WdParagraphAlignment.wdAlignParagraphCenter, "宋体");             //添加文字
            word.NewLine();                                            //换行
            word.InsertText("Word文档创建成功!", 18, WdColor.wdColorRed, 0,
               WdParagraphAlignment.wdAlignParagraphDistribute, "黑体");         //添加文字

            word.InsertPicture(Directory.GetCurrentDirectory() + "\\189.png", 100, 75);
            //添加图片

            SqlDataAdapter adapter = new SqlDataAdapter("SELECT * FROM staq_info",
         "Data Source=.\\SQLEXPRESS;Initial Catalog=aq;Integrated Security=True");
            DataSet dataSet = new DataSet();
            adapter.Fill(dataSet);                                                     //填充数据集
            word.InsertTable(dataSet);                                         //插入表格

            word.SaveWord(Directory.GetCurrentDirectory() + "\\测试文档11.doc");//保存Word文档
            word.QuitWord();
        }
    }
}

代码中的aq是数据库,staq是数据表格 ,具体参考数据库章节/两篇代码汇总了word1-3章节

启动CreateWord的控制台应用程序:

--读取Word文档中表格 --

【实现过程】
(1)在OfficeOperator项目的WordOperator类中定义打开Word文档的函数OpenWord

public void OpenWord(string fileName)
     {
         object FileName = fileName;                            //Word文档文件名称
         WordDoc = WordApp.Documents.Open(ref FileName);        //打开Word文档
     }

(2)在WordOperator类中定义读取Word文档中表格的函数ReadTable,代码如下:

 public string ReadTable()
 {
     string stringTable = string.Empty;
     foreach (Table table in WordDoc.Tables)
     {//遍历Word文档中的表格
         for (int row = 1; row <= table.Rows.Count; row++)
         {//遍历表格中的行
             for (int column = 1; column <= table.Columns.Count; column++)
             {//遍历表格中的列
                 stringTable += table.Cell(row, column).Range.Text;//读取表格元素
                 stringTable = stringTable.Remove(stringTable.Length - 2, 2);//删除\r\a
                 stringTable += "\t";
             }
             stringTable += "\n";
         }
     }
     return stringTable;
 }

(3)创建一个名为OpenWord的控制台应用程序,为其添加对OfficeOperator项目的引用

using OfficeOperator1;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace OpenWord
{
    internal class Program
    {
        static void Main(string[] args)
        {
            WordOperator1 word = new WordOperator1();
            word.OpenWord(Directory.GetCurrentDirectory() + "\\测试文档.doc");   //打开Word文档
            Console.WriteLine(word.ReadTable());                               //读取Word文档中的表格
            word.QuitWord();
            Console.ReadKey();
        }
    }
}

(4)在程序路径准备 测试文档.doc(这里是上一章创建保存的文档复制过来):

 启动OpenWord的控制台应用程序:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1638388.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不小心格式化固态硬盘之后,数据能恢复吗?小白实测

前言 这段时间突然想到一件事情&#xff1a;固态硬盘一旦坏了&#xff0c;数据恢复的可能性基本上是0。 这件事情是小白自己亲身经历的&#xff0c;所以使用固态硬盘的小伙伴一定要注意数据备份&#xff0c;至少备一份到机械硬盘里&#xff0c;还会稍微可靠一些。 这几天小白…

node.js的常用内置库(1)共128节

我说假如node.js 一路杀出&#xff0c;成为一种后端主要选型的时候&#xff0c;你再次去了解晚么&#xff0c;不晚&#xff0c;但给你的时间肯定不多&#xff5e;&#x1f604; 跟着我一起开始认识node吧&#xff0c;今日份不多3个API &#xff0c;加油 1.assert 在 Node.js 环…

水稻病害检测(YOLO数据集,多分类,稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫)

是自己利用LabelImg工具进行手工标注&#xff0c;数据集制作不易&#xff0c;请尊重版权&#xff08;稻瘟病、纹枯病、褐斑病、枯心病、霜霉病、水稻细菌性条纹斑病、稻苞虫&#xff09; 如果需要yolv8检测模型和数据集放在一起的压缩包&#xff0c;可以关注&#xff1a;最新最…

Pandas入门篇(三)-------数据可视化篇3(seaborn篇)(pandas完结撒花!!!)

目录 概述一、语法二、常用单变量绘图1. 直方图&#xff08;histplot&#xff09;2. 核密度预估图&#xff08;kdeplot&#xff09;3. 计数柱状图&#xff08;countplot&#xff09; 三、常用多变量绘图1.散点图(1) scatterplot(2)regplot 散点图拟合回归线(3)jointplot 散点图…

DVWA 靶场命令注入通关解析

介绍 命令注入&#xff08;Command Injection&#xff09;是一种常见的安全漏洞&#xff0c;它允许攻击者通过在应用程序中执行恶意命令来获取系统权限或执行非授权操作。 命令注入通常发生在需要将用户输入作为命令执行的地方&#xff0c;例如Web应用程序的输入框、参数传递…

【C++容器map】map的相关用法

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | 初阶数据结构 | Linux 本篇文章主要讲解 C容器之map相关用法 的相关内容 文章目录 1. map的介绍2. map的使用<font size5 color #…

Word域代码学习(简单使用)-【SEQ】

Word域代码学习(简单使用)-【SEQ】 快捷键 序号快捷键操作1 Ctrl F9 插入域代码花括号2 F9 显示域代码结果3 Shift F9 切换为域代码4 Windows Alt F9 切换全部域代码 域代码说明 域代码不区分大小写在word中&#xff0c;依次选择插入➡文档部件➡域即可选择插入…

WordPress Automatic插件 SQL注入漏洞复现(CVE-2024-27956)

0x01 产品简介 WordPress Automatic(又称为WP Automatic)是一款流行的WordPress插件,旨在帮助网站管理员自动化内容创建和发布。该插件可以从各种来源(如RSS Feeds、社交媒体、视频网站、新闻网站等)获取内容,并将其自动发布到WordPress网站。 0x02 漏洞概述 WordPres…

Linux-进程调度器

1. 前言 在计算机中&#xff0c;进程的数量远多于cpu的数量&#xff0c;所以就存在&#xff0c;多个进程抢占一个cpu的情况&#xff0c;所以就需要一套规则&#xff0c;决定这些进程被处理的顺序&#xff0c;这就叫做进程调度。 在我的简单理解下&#xff0c;其实就是把进程放…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.4--汇编LED驱动程序

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

网络安全之弱口令与命令爆破(中篇)(技术进阶)

目录 一&#xff0c;什么是弱口令&#xff1f; 二&#xff0c;为什么会产生弱口令呢&#xff1f; 三&#xff0c;字典的生成 四&#xff0c;使用Burpsuite工具验证码爆破 总结 笔记改错 一&#xff0c;什么是弱口令&#xff1f; 弱口令就是容易被人们所能猜到的密码呗&a…

Android数据恢复软件快速比较:Android数据恢复的7最佳工具

您在 Android 设备上保留哪些类型的数据&#xff1f;如果您和大多数人一样&#xff0c;那么您可能已经列出了文档、照片、视频和音频文件。如果您使用智能手机或平板电脑的时间足够长&#xff0c;我们愿意打赌您拥有Android数据丢失的第一手经验。 幸运的是&#xff0c;我们也…

JSON教程(非常详细)

参考文章来源&#xff1a;JSON教程&#xff08;非常详细&#xff09; 目录 JSON JSON 发展史 为什么要使用 JSON&#xff1f; JSON 的不足 存储格式 使用场景 1) 定义接口 2) 序列化 3) 生成 Token 4) 配置文件 JSON语法规则 JSON 与 JavaScript 对象的区别 JSON数…

Python | Leetcode Python题解之第62题不同路径

题目&#xff1a; 题解&#xff1a; class Solution:def uniquePaths(self, m: int, n: int) -> int:return comb(m n - 2, n - 1)

基于SSM的个人博客系统(三)

目录 第五章 系统实现 5.1 登录模块 5.1.1 博主登录 5.2 博客管理模块&#xff1a; 5.2.1 博客查询 5.2.2 博客新建 5.2.3 博客修改 5.2.4 博客删除 5.3 博客类别管理模块 前面内容请移步 基于SSM的个人博客系统&#xff08;二&#xff09; 个人博客系统的设计…

飞腾FT1500A-16 6U VPX高性能密集计算刀片

飞腾FT1500A-16 6U VPX高性能密集计算刀片 一款高性能6U VPX单板显示计算机&#xff0c;产品遵循OpenVPX Vita65规范。采用目前主流的GPGPU架构&#xff0c;其板载一颗天津飞腾公司的FT1500A-4四核处理器&#xff0c;并搭配AMD?公司的高性能嵌入式显卡Radeon? E8860 GPU。E88…

【论文阅读:Data Shapley: Equitable Valuation of Data for Machine Learning】

1.基于蒙特卡罗方法和截断的方法计算&#xff08;TMC—Shapley&#xff09; 输入 训练数据集D学习算法A表现分V 输出 各方数据的贡献 ϕ i \phi_i ϕi​ 初始化 初始化各方的贡献 ϕ i 0 \phi_i0 ϕi​0,并设置当前迭代轮次为0 过程 算法进入一个循环迭代&#xff0c;直到满足…

Vue 之 在当前页面的实现分页效果

目录 场景实现 场景 假设&#xff0c;我们现在有这么一个需求&#xff1a; 上述图片的空白内容是活动的&#xff0c;由下面的两个按钮控制上一页、下一页&#xff1b;我们应该可以怎么去实现&#xff1f; 实现 思路&#xff1a; 其实这个问题&#xff0c;我们仿照其他的UI框…

ctf web-部分

** web基础知识 ** *一.反序列化 在PHP中&#xff0c;反序列化通常是指将序列化后的字节转换回原始的PHP对象或数据结构的过程。PHP中的序列化和反序列化通过serialize()和unserialize()函数实现。 1.序列化serialize() 序列化说通俗点就是把一个对象变成可以传输的字符串…

2024年五一数学建模C题完整解题思路代码

2024年第二十一届五一数学建模竞赛题目 C题 煤矿深部开采冲击地压危险预测 煤炭是中国的主要能源和重要的工业原料。然而&#xff0c;随着开采深度的增加&#xff0c;地应力增大&#xff0c;井下煤岩动力灾害风险越来越大&#xff0c;严重影响着煤矿的安全高效开采。在各类深…