Я пытаюсь преобразовать таблицы 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));
}
'content.Replace ((char) (0x07), (char) (0x20))'? Вы, кажется, заменяете его пустой строкой –
Из [здесь] (https://msdn.microsoft.com/en-us/library/dd909100%28v=office.12%29.aspx) кажется, что 0x07 - это «конец» метки ячейки «ИЛИ« конец строки »: * конец метки ячейки: символ с шестнадцатеричным значением« 0x07 », который используется для указания конца ячейки в таблице. * –
@RubensFarias благодарим вас. Это позволяет мне двигаться вперед. Отлично. –