C# 读取二维数组集合输出到Word预设表格

这篇具有很好参考价值的文章主要介绍了C# 读取二维数组集合输出到Word预设表格。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

应用场景

设计约定

范例运行环境

配置Office DCOM

实现代码

组件库引入

核心代码

DataSet转二维数组

导出写入WORD表格

调用举例

小结


应用场景

存储或导出个人WORD版简历是招聘应用系统中的常用功能,我们通常会通过应用系统采集用户的个人简历信息到数据库,许多情况下我们会读取数据记录导出到WORD文件中,以便汇总、打印。其中,WORD表格元素是经常会被用到的,比如问卷调查表格、教育经历表格、工作经历表格等等。

设计约定

1、设计WORD模板,在需要输出值的地方绘制表格,表格的数量对应输出的数据表数量。

2、根据条件查询数据表,生成 DataSet ,遍历 Tables ,生成对应的二维数组集合,将数据输出到对应的WORD表格中。

3、按约定,WORD表格的数量应该大于等于 DataSet 里的 Tables 数量。

4、按参数设定对应的WORD表格ID序号,如参数设定为2,则表示输出到WORD文件中的第二个表格中。(注意:WORD表格序号以1为开始)

在输出写入的方式中,我们约定有两种方式:

一为覆盖式写入(即已预知数据输出模式)举例如下图:

C# 读取二维数组集合输出到Word预设表格,微软Office计算中心,c#,word,开发语言

二为动态式写入(即未知数据行数量)举例如下图:

C# 读取二维数组集合输出到Word预设表格,微软Office计算中心,c#,word,开发语言

范例运行环境

操作系统: Windows Server 2019 DataCenter

操作系统上安装 Office Word 2016

数据库:Microsoft SQL Server 2016

.net版本: .netFramework4.7.1 或以上

开发工具:VS2019  C#

配置Office DCOM

配置方法可参照我的文章《C# 读取Word表格到DataSet》进行处理和配置。

实现代码

组件库引入

核心代码

DataSet转二维数组

public object[,] DataSetToObjectData(DataSet ds,int TableId,bool hastitle),该方法提供3个参数,DataSet数据集、指定表索引、导出是否包含标题列名称。

		public object[,] DataSetToObjectData(DataSet ds,int TableId,bool hastitle)
		{
			ArrayList rowdata = new ArrayList();
			int _fieldcount=ds.Tables[TableId].Columns.Count;
			Object[] colvalues = new Object[_fieldcount];
			for(int i=0;i<_fieldcount;i++)
			{
				colvalues[i]=ds.Tables[TableId].Columns[i].ColumnName;
			}
			if(hastitle)
				rowdata.Add(colvalues);
			for(int i=0;i<ds.Tables[TableId].Rows.Count;i++)
			{
				Object[] values = new Object[_fieldcount];
				values=ds.Tables[TableId].Rows[i].ItemArray;
				rowdata.Add(values);
				RowsCount++;
			}
			object[,] rv=new object[rowdata.Count,_fieldcount];
			for(int i=0;i<rowdata.Count;i++)
			{
				for(int j=0;j<_fieldcount;j++)
				{
					rv[i,j]=((object[])rowdata[i])[j];
				}
			}
			return rv;
		}
导出写入WORD表格

public string DataSetToWordTables(string _filename,int[,] _drawtype,object[] _datas),该方法提供3个参数,使用的WORD模板文件路径、写入配置(包括要写入的WORD表格ID,写入方式:0为覆盖;1为从第二行动态追加;3为从第一行动态追加)、对应的二维数组集合。

public string DataSetToWordTables(string _filename,int[,] _drawtype,object[] _datas)        {
            Object Nothing = System.Reflection.Missing.Value;
            object filename = _filename;
            //创建一个名为WordApp的组件对象
            Word.Application WordApp = new Word.Application();
            //创建一个名为WordDoc的文档对象
            WordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;

            Word.Document WordDoc = WordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);

            WordDoc.SpellingChecked = false;//关闭拼写检查

            WordDoc.ShowSpellingErrors = false;//关闭显示拼写错误提示框

				for(int i=_drawtype.GetLength(0)-1;i>=0;i--)
				{
					int _tableid=_drawtype[i,0];
					int _draw=_drawtype[i,1];
					object[,] r_datas=(object[,])_datas[i];
					int _rowscount=r_datas.GetLength(0);
                    if (_rowscount == 0)
                    {
                        WordDoc.Tables[_tableid].Delete();
                        continue;
                    }
                    int startrowid = 2;
                    if (_draw == 3)
                    {
                        startrowid = 1;
                    }
					if(_draw==1||_draw==3)
					{
						object _row=(object)WordDoc.Tables[_tableid].Rows[startrowid];
						for(int j=0;j<_rowscount-1;j++)
						{
							WordDoc.Tables[_tableid].Rows.Add(ref _row);

						}
					}
                    for (int k = 0; k < r_datas.GetLength(0); k++)
					{
						for(int m=0;m<r_datas.GetLength(1);m++)
						{
                            WordDoc.Tables[_tableid].Cell(k + startrowid, m + 1).Range.Text = r_datas[k, m].ToString();
                        }
					}
				}

			WordDoc.Save();
            WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);
			//关闭WordApp组件对象
			WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);
    return "";
}
调用举例

如下为示例代码:

string _filename=@"x:\test.docx";
int[,] _drawtype=new int[2,2];
_drawtype[0,0]=1;  //写入WORD第一个表格
_drawtype[0,1]=0;  //覆盖式写入

_drawtype[1,0]=2;  //写入WORD第二个表格
_drawtype[1,1]=1;  //动态追加行写入

object[] _datas=new object[2];
DataSet ds=getDataSet(); //获取DataSet对象
_datas[0]=DataSetToObjectData(ds,0,false); //获取DataSet Tables[0]的二维数组数据
_datas[1]=DataSetToObjectData(ds,1,false); //获取DataSet Tables[1]的二维数组数据

string result=DataSetToWordTables(_filename,_drawtype,_datas);  //写入Word表格        

小结

1、核心代码中对无数据的表格采取了删除WORD表格的操作。

2、预设表格的优点在于所见即所得,样式设计简单化,便于理解输出,我们还可以采用关键字定位并动态添加WORD表格的形式进行输出,来实现更加复杂的样式等。

3、核心代码中输出的起始行为第2行,根据设置也可以为第1行。如果我们设计的表格比较复杂(如包括合并单元格等),则可以对 _drawtype进行改造,增加一个参数,用于指定从第几行开始进行输出。

这些代码我们提供了一些操作WORD相关的关键方法,这里仅作参考,欢迎大家评论指教!文章来源地址https://www.toymoban.com/news/detail-842533.html

到了这里,关于C# 读取二维数组集合输出到Word预设表格的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# 操作word中的表格 批量复制和批量插入

    用的是windows自带的dll包,没有引用第三方 批量插入表格后,原理就是整个文档会从前到后编制表格索引,从一开始意思是前面序号为1.2.3表格,1复制3个在后面,那么原先的2表格序号就标为2+3=5!为表格设置各种值也是按这个序号来!

    2024年02月08日
    浏览(58)
  • C#:对word中表格进行复制、粘贴并且替换内容

    在我上一篇对于word开发讲述的文章中对word开发进行了一些介绍,今天接着上一篇文章再介绍一下如何复制word中的表格,然后进行粘贴的操作,最后再介绍一下如何替换表格中的文本。 首先如果想要复制word中的表格自然然需要先实例化doc,这个就不写了。不会的伙伴可以去

    2024年02月09日
    浏览(41)
  • 将一个简单的矩阵(二维数组)转置 并输出(C语言)

    描述: 输入一个3行4列的矩阵(二维数组)a,接着将矩阵a转置为矩阵b,然后输出矩阵b。 输入: 输入3行,每行输入4个整数,整数之间用空格隔开。 输出: 输出4行,每行输出3个整数,整数之间用空格隔开。 输入样例 1:  输出样例 1:

    2024年02月07日
    浏览(47)
  • c#关于文件夹/文件/文本读取遍历,写入还有表格的读取的一些方法

    c#遍历文件夹下的各种文件 将一些log写入到文本文件中: fs.Seek(offset, whence);移动文件读取的指针到指定位置 offset:开始的偏移量,也就是代表需要移动偏移的字节数 whence:给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始

    2024年02月01日
    浏览(59)
  • 利用二维数组输出一个3*4的矩阵的最大值及其所在的行、列

    利用二维数组输出一个3*4的矩阵的最大值及其所在的行、列 要输出矩阵如下: 核心:定义一个最大值的标志,一般我们把数组的第一个位置的数赋给最大值标志,然后遍历二维数组,每遍历到一个数时,将其与标志进行比较,若大于最大值标志,则将其的值赋给最大值标志

    2024年01月23日
    浏览(52)
  • springboot yml文件自定义配置的读取、使用 字符串 数组 对象 集合

    .yml 配置 controller代码 实体类 Student.java Users.java User.java 方式一、 http://localhost:9801/test/test1 方式二、 http://localhost:9801/test/test2 方式三、 http://localhost:9801/test/test3 参考: SpringBoot:yml文件详解-CSDN博客 https://www.jb51.net/article/216769.htm

    2024年02月05日
    浏览(52)
  • C#入门及进阶|数组和集合(十):Queue类

            在某种线性表中,需要加入的元素总是插入到线性表的末端,且总是从线性表的头部取出或删除元素,我们把这种线性表称为队列。         在C#中,通过Queue集合来封装对队列的操作,在队列中对元素的操作遵循“先进先出”的原则。Queue类常用的属性和方法

    2024年02月19日
    浏览(36)
  • springboot读取yml文件中的list列表、数组、map集合和对象方法实例

    目录前言application.yml定义list集合application.yml定义数组类型总结 前言 springboot配置文件yml类型简单的风格,十分受大家的欢迎,支持字符string类型,支持列表list类型,支持集合map类型,支持数组array类型,支持类对象类型,下面我们来实战下这些形式的配置如何取值 applicatio

    2024年02月09日
    浏览(52)
  • Word控件Aspose.Words教程:使用 C# 读取 SXC 和 FODS 文件

    Aspose.Words是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。 Aspose支持流行文件格式处理,并允许将各类文档导出或转换为固定布局文件格式和最常用的图像/多媒体格

    2024年02月10日
    浏览(50)
  • C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面

    最近的项目要求读取xls文件内的单元格,并且单元格旁边会有复选框标识类型。 搜了下只有java的POI有例子,NOPI看项目文档好像是没有实现读取控件的功能。 java实现 POI  POI如何解析出excel 中复选框是否被选中 https://blog.csdn.net/qq_29832217/article/details/104413475  C#导出 Excel 时,

    2024年02月14日
    浏览(89)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包