在C#中将MS字表转换为html [英] Convert MS word tables to html in C#

查看:127
本文介绍了在C#中将MS字表转换为html的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用C#编写Word Addin,将所有格式替换为xml标签,
现在我希望将word转换为带有标准标签的html,
表可能在行数和列数上有所不同,
我的意思是表包含合并的单元格或列

I'm writing a Word Addin with C# that replace all formats to xml tags, now I want convert tables in word to html with standard tags, tables may different in rows count and columns count, I mean table contains merged cells or columns

相同:

-------------------------
|  1  |  2  |  3  |  4  |
|     -------------------
|     |  5  |  6  |  7  |
|     -------------------
|     |        8        |
|     -------------------
|     |  9  | 10  | 11  |
|------------------------
| 12  | 13  | 14  | 15  |
-------------------------

单元格1合并一列中的四行
而单元格8合并一行中的三列

that cell 1 is merge of four rows in one column and cell 8 is merge of three columns in one row

如何我能转换它吗?

推荐答案

回复tanx,
i找到了将字表转换为html的方法。
我写这段代码:

tanx for reply, i found a way to convert word tables to html.
i write this code:

private static void ConvertTableToHTML()
    {
        try
        {
            foreach (Table tb in Common.WordApplication.ActiveDocument.Tables)
            {

                for (int r = 1; r <= tb.Rows.Count; r++)
                {
                    for (int c = 1; c <= tb.Columns.Count; c++)
                    {
                        try
                        {
                            Cell cell = tb.Cell(r, c);
                            foreach (Paragraph paragraph in cell.Range.Paragraphs)
                            {
                                Tagging(paragraph.Range, "P");
                            }
                            Tagging(cell.Range, "TD");                                
                        }
                        catch (Exception e)
                        {
                            if (e.Message.Contains("The requested member of the collection does not exist."))
                            {
                                //Most likely a part of a merged cell, so skip over.
                            }
                            else throw;
                        }
                    }
                    try
                    {
                        Row row = tb.Rows[r];
                        Tagging(row.Range, "TR");                            
                    }
                    catch (Exception ex)
                    {
                        bool initialTrTagInserted = false;
                        int columnsIndex = 1;
                        int columnsCount = tb.Columns.Count;
                        while (!initialTrTagInserted && columnsIndex <= columnsCount)
                        {
                            try
                            {
                                Cell cell = tb.Cell(r, columnsIndex);
                                cell.Range.InsertBefore("<TR>");
                                initialTrTagInserted = true;
                            }
                            catch (Exception e)
                            {
                            }
                            columnsIndex++;
                        }

                        columnsIndex = tb.Columns.Count;
                        bool endTrTagInserted = false;
                        while (!endTrTagInserted && columnsIndex >= 1)
                        {
                            try
                            {
                                Cell cell = tb.Cell(r, columnsIndex);
                                cell.Range.InsertAfter("</TR>");
                                endTrTagInserted = true;
                            }
                            catch (Exception e)
                            {
                            }
                            columnsIndex--;
                        }
                    }
                }
                Common.Tagging2(tb.Range, "Table");                    

                object separator = "";
                object nestedTable = true;
                tb.ConvertToText(separator, nestedTable);
            }
        }
        catch (Exception ex) { MessageBox.Show(ex.Message); }
    }


public static void Tagging(Range range, string TagName)
    {
        try
        {
            range.InsertBefore("<" + TagName + ">");
            range.InsertAfter("</" + TagName + ">");
        }
        catch (Exception ex) { throw new Exception(ex.Message); }
    }

这篇关于在C#中将MS字表转换为html的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆