2015-12-23 3 views
2

Я пытаюсь преобразовать таблицы MS Word в HTML через код. Я в процессе адаптации кода, приведенного в this answer, но мне нужна результирующая таблица HTML, которая в конечном итоге будет преобразована в формат таблицы CALS, а затем объединена с существующим деревом XML, которое генерирует моя программа.hexadecimal значение 0x07, является недопустимым символом

Я сейчас работаю на преобразование из таблицы Word, в HTML таблицы части (до преобразования, что CALS), но моя проблема, кажется, повторяющаяся ошибка, которая говорит:

hexadecimal value 0x07, is an invalid character 

И конечно же, если я посмотрю на полученный HTML из каждой ячейки таблицы через messageBox по мере запуска моей программы, я вижу, что после текста из ячейки таблицы появляется небольшое поле.

Я пытался использовать что-то вроде

string newContent = content.Replace((char)(0x1F), Convert.ToChar("")); 

заменить символ, но он жалуется на то, что строка должна быть длинной один символ.

Возможно, я ошибаюсь в том смысле, что я пытаюсь сохранить HTML внутри XElement. Но я не думаю, что это вызывает проблему ?!

Проблема явно маленькая «коробка» в ячейках таблицы Word, но не уверен, что это такое или как игнорировать или удалять ее.

Вот мой код

 private void dealWithTables() 
      { 

      try 
      { 
       foreach (Table tb in doc.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) 
            { 
             Tagging2(paragraph.Range, "P", paragraph.Range.Text); 
            } 
            Tagging2(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]; 
           Tagging2(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--; 
          } 
         } 
        } 
         Tagging2(tb.Range, "Table");  

        object separator = ""; 
        object nestedTable = true; 
        tb.ConvertToText(separator, nestedTable); 

       } 

      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.Message); 
      } 


     } 

XElement tableTree = new XElement("table"); 

     public void Tagging2(Range range, string tagName, string content) 
     { 
      string newContent = content.Replace((char)(0x1F), Convert.ToChar("")); 

      tableTree.Add(new XElement(tagName, newContent)); 
      MessageBox.Show("text of para " + newContent); 

     } 
     public void Tagging2(Range range, string tagName) 
     { 
      tableTree.Add(new XElement(tagName)); 
     } 
+0

'content.Replace ((char) (0x07), (char) (0x20))'? Вы, кажется, заменяете его пустой строкой –

+0

Из [здесь] (https://msdn.microsoft.com/en-us/library/dd909100%28v=office.12%29.aspx) кажется, что 0x07 - это «конец» метки ячейки «ИЛИ« конец строки »: * конец метки ячейки: символ с шестнадцатеричным значением« 0x07 », который используется для указания конца ячейки в таблице. * –

+0

@RubensFarias благодарим вас. Это позволяет мне двигаться вперед. Отлично. –

ответ

1

Кажется, вы заменяете его с пустой строкой, таким образом, ваше сообщение об ошибке. Попробуйте заменить его на пробел:

content.Replace((char)(0x07), (char)(0x20))