C# 读取Word 表格数据(单元格纵合并)

标签: C# 数据 单元格合并 word merge
4358人阅读 评论(1) 收藏 举报
分类:

先介绍一个例子,来说明行中单元格合并(横合并) 与 列单元格合并(纵合并)的区别:

  

对于上面的表格,对Cells遍历的结果,True表示该行该列的单元格存在,False表示不存在。 

 

可以看到,word表格中行和列的合并单元格(Merge)机制是不一样的。

行中单元格的合并时,将合并单元格作为普通单元格格来依次存储。

列中单元格合并时,只将合并的第一个单元格的数据进行存储,其他的单元格只保留其指针。(就像相邻的两个小区,原先各有各的门牌号,现在两个小区合并了,只需要一个门牌号,只保留了一个门牌号,另一个门牌号暂时不用,则弃用的门牌号只是一个门牌,不指向任何一栋建筑物。)


对于列中单元格合并(纵合并)(如上图)的数据读取的代码如下:

读取table.Cell(rowIndex, columnIndex).Range.Text.Trim(),报错的时候,则说明是合并的单元格,则读取同列上一行的数据。

注意:Word 中Table 的行和列的开始索引是从1开始的。


  public static DataTable ReadSourceWordData(string filePath)
        {
            Word.ApplicationClass applicationClass = new Word.ApplicationClass();
            Word.Document document = null;
            object EmptyData = System.Reflection.Missing.Value;
            object path = filePath;
            DataTable dt = new DataTable();
            try
            {
                document = applicationClass.Documents.Open(ref path, ref EmptyData, ref EmptyData, ref EmptyData, ref EmptyData
                , ref EmptyData, ref EmptyData, ref EmptyData, ref EmptyData, ref EmptyData, ref EmptyData, ref EmptyData, ref EmptyData
                , ref EmptyData, ref EmptyData, ref EmptyData);
                
                Word.Table table = document.Tables[1];
                if (table != null)
                {
                    #region 判断是否有横向合并项

                    try
                    {
                        Word.Column tempColumns = table.Columns[1];
                    }
                    catch (Exception ex)
                    {
                        throw new Exception("表格中有横合并项,无法读取数据。原因:" + ex.Message);
                    } 

                    #endregion

                    #region 读取表格的数据

                    for (int columnIndex = 1; columnIndex <= table.Columns.Count; columnIndex++) //将第一行数据作为列标题
                    {
                        string valueString = table.Cell(1, columnIndex).Range.Text.Trim();
                        dt.Columns.Add(valueString.Substring(0, valueString.Length - 2));
                    }

                    for (int rowIndex = 2; rowIndex <= table.Rows.Count; rowIndex++)
                    {
                        List<object> rowDatas = new List<object>();

                        for (int columnIndex = 1; columnIndex <= table.Columns.Count; columnIndex++)
                        {
                            try
                            {
                                string valueString = table.Cell(rowIndex, columnIndex).Range.Text.Trim();
                                rowDatas.Add(valueString.Substring(0, valueString.Length - 2));
                            }
                            catch (Exception ex)
                            {
                                rowDatas.Add(dt.Rows[rowIndex - 3][columnIndex - 1]);
                            }
                        }
                        dt.Rows.Add(rowDatas.ToArray());
                    } 

                    #endregion
                }

                document.Close(ref EmptyData, ref EmptyData, ref EmptyData);
                applicationClass.Quit(ref EmptyData, ref EmptyData, ref EmptyData);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(applicationClass);
              
            }
            catch (Exception ex)
            {
                if (document != null)
                {
                    document.Close(ref EmptyData, ref EmptyData, ref EmptyData);
                }

                if (applicationClass != null)
                {
                    applicationClass.Quit(ref EmptyData, ref EmptyData, ref EmptyData);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(applicationClass);
                }

                dt = null;

                throw ex;
            }

            return dt;
        }


对于 横合并 或者 横纵合并并存 的表格暂时和没有找到解决的方法。
















            
查看评论

C# 读取Word 表格数据(单元格纵合并)

先介绍一个例子,来说明行中单元格合并(横合并) 与 列单元格合并(纵合并)的区别:    对于上面的表格,对Cells遍历的结果,True表示该行该列的单元格存在,False表示不...
  • u010954794
  • u010954794
  • 2014-05-09 18:12:04
  • 677

Aspose.Word 操作word复杂表格 拆分单元格 复制行 插入行

private void button3_Click(object sender, EventArgs e)         {             object savePathWord ="r...
  • jelenyoung
  • jelenyoung
  • 2015-06-09 23:44:33
  • 4866

Aspose.Word控件实现Word文档的操作(创建和合并单元格)

Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般...
  • liuwen718
  • liuwen718
  • 2014-05-16 15:00:07
  • 3451

Aspose.Words.Tables.Row类操作word表格行

http://www.aspose.com/docs/display/wordsnet/Aspose.Words.Tables.Row+Class Retrieves the index o...
  • jelenyoung
  • jelenyoung
  • 2015-06-09 20:28:40
  • 4793

.net aspose.word导出world生成成列表及合并单元格

导出效果如下图: 还是先分享下学习链接:http://www.cnblogs.com/wuhuacong/archive/2013/02/05/2893191.html 如上图,采用简单的...
  • sinat_35165183
  • sinat_35165183
  • 2017-01-23 18:36:58
  • 1798

Mvc,asp.net c# Aspose.cell导出表格,合并单元格,设置样式

导出效果 首先分享下aspose.cell导出的关键点:为每一个cell单元格填充数据 这里我也只使用了cell,merge。 首先你要下载aspose.Cells.dll 然后使...
  • sinat_35165183
  • sinat_35165183
  • 2017-01-19 18:32:20
  • 2670

aspose.words for asp.net word模版-修改标签-合并单元格

public void ExportToWord(int iRecordID)         {             DataTable dtResult = dbo.Query("usp_...
  • kong_aspx
  • kong_aspx
  • 2012-12-20 17:27:10
  • 4202

[原]C# 读取Word 表格数据(单元格纵合并)

2014-5-8阅读697 评论0 先介绍一个例子,来说明行中单元格合并(横合并) 与 列单元格合并(纵合并)的区别:    对于上面的表格,对Cells遍历的结果,Tr...
  • p656456564545
  • p656456564545
  • 2015-10-14 11:43:54
  • 1315

C#实现Word中表格信息读取

 很多时候,会有很多信息存放在Word文档中。而我们需要把这些信息提取出来,另做它用。而Word的格式是ms的机密,不知道有没有NB人可以对其做字符流的分析,反正我是没这能力也没这打算。所以就只...
  • Andrewniu
  • Andrewniu
  • 2017-01-23 11:06:43
  • 3791

asp.net操作word的表格

近日开发中用户要求实现导出数据为Word,本来想使用html保存为word的实现,但因用户要求样式很高,使用html不好控制,并且导出中包括图片,使用页面导出时图片还是一个路径,不能把图片包括在wor...
  • littlechang
  • littlechang
  • 2013-08-27 17:06:04
  • 4007
    个人资料
    持之以恒
    等级:
    访问量: 15万+
    积分: 1905
    排名: 2万+
    最新评论