Как вставить форматированный текст с маркерами и интервалами в указанную ячейку в excel с помощью paste special C#
Я работаю над написанием HTML форматированного текста в excel с помощью жирный, курсив, цвет шрифта, маркеры и т. д. В c#.
Я использую специальный метод вставки excel для вставки в определенный диапазон ячеек.
Форматированный текст вставляется правильно для жирного шрифта, курсива, цветов и т.д. Но если html-ввод содержит пробелы или маркеры, то содержимое вставляется в ячейки за пределами выбранного диапазона.
Я требую, чтобы маркеры и интервалы вставлялись только в указанный диапазон ячеек. Пожалуйста, помогите мне здесь.
Когда я попробовал использовать
Range("A1").PasteSpecial Paste:=xlPasteType.xlPasteValues, _ Operation:=xlPasteSpecialOperation.xlPasteSpecialOperationAdd, _ SkipBlanks:=False, _ Transpose:=False
на выбранном диапазоне вместо sheet.pastespecial он вызвал исключение "Pastespecial method of range class failed".
Пожалуйста, помогите мне здесь . Спасибо. Я также приложил образец содержимого файла excel здесь:
Sl. No. Description 1 test for a sentence without spacing 2 spacing present in the sentence sentence 2 sentence 3 3 Test 1 Test 2 Test 3
Входные html-строки таковы::
1. Тест на A <u>предложение</u> Без <b>интервала</b>
2. интервал, присутствующий в предложении<br />
<br /><br />предложение 2<br />
<br /><br /> <br /> b>предложение 3</b>
3. <ul>
<li>Тест 1</li>
</ul>
<br />
<ul>
<li><b>Тест 2</b></li>
</ul>
&ЛТ;БР /&ГТ;&ампер;усилитель; nbsp;&ЛТ;БР /&ГТ;
<ul>
<li>Тест 3</li>
</ul>
Что я уже пробовал:
//способ вставки в excel
public void PasteFormattedTextToExcel(Excel.Worksheet sheet, Excel.Range usedRange) { try { //fetching the usedrange row count for the column where data needs to be pasted int rowValues = sheet.UsedRange.Columns[3, Type.Missing].Rows.Count; if (descriptionValuesForExcel.Count != 0) { for (int i = 3; i <= rowValues+1; i++) { //writing the data to clipboard CopyHtmlToClipBoard(descriptionValuesForExcel[i - 3]); //selecting the sheets sheet.Select(); //collecting the cell range to paste sheet.Cells[i,4].Select(); sheet.Cells[i,4].PasteSpecial(); sheet.Cells[i,4].Select(); } } } catch (Exception ex) { }
Jochen Arndt
Гораздо лучше было бы увидеть HTML-источник копируемого текста.
Я не знаю точно, как Excel обрабатывает вставку HTML, но я предполагаю, что он вставляет определенные форматы, такие как таблицы и списки, в несколько ячеек.
Member 13922719
Я обновил html-строки. Пожалуйста, проверьте это. Точно, его вставка в соседние ячейки основана на интервале, но я требую, чтобы то же самое форматирование поддерживалось только в выбранной ячейке.
Jochen Arndt
Как я и ожидал:
Вы вставляете списки, которые Excel охватывает в несколько ячеек. Вы также используете теги br (разрыв строки; это не "интервал"), которые Excel также обрабатывает как "вставить в следующую строку".
КСТАТИ:
Почему у вас есть списки только с одним элементом?
Это также не совсем корректный HTML, потому что br-теги должны быть внутри других блочных элементов (обычно p-блоков).
Excel организует данные на основе строк и столбцов. При вставке данных, которые организованы аналогично, они вставляются в несколько ячеек. Если вы не хотите такого поведения, вы должны подготовить данные соответствующим образом.
Быстрое веб-исследование показывает решение, когда вы делаете это вручную:
Вставьте в поле ввода строки формул вместо ячейки.
Но я не знаю, можно ли это сделать программно (вставка формул может быть выполнена, но я не знаю, как "вставить" туда HTML).
Member 13922719
Спасибо..Список descriptionValuesForExcel имеет несколько элементов, каждый из которых является html-текстом, который записывается в буфер обмена. Хорошо, теперь я понимаю, что наличие тегов и переносит содержимое в соседние ячейки. Извините, что я не понимаю идею вставки содержимого в строку формул. Этот список будет иметь, скажем, 50 html - текстов, но все равно будет хорошей идеей вставить его, как было предложено.
Jochen Arndt
При выполнении этого вручную с активным экземпляром Excel:
Вместо того чтобы выбрать ячейку и вставить ее туда, выберите ячейку и вставьте в поле ввода формулы, показанное в верхней части окна приложения Excel под строкой меню.
Я думаю, что соответствующий метод автоматизации будет использовать диапазон.PasteSpecial с пастой:=xlPasteType.xlPasteFormulas
Вы могли бы попробовать.
Member 13922719
Конечно, спасибо.- Я проверю его и вернусь.
Member 13922719
Я попытался внести следующие изменения в код:
лист.Клетки[i,4].PasteSpecial(Microsoft.Офис.Взаимодействие.Превосходить.XlPasteType.xlPasteFormulas);
Он выдает исключение "невозможно получить свойство PasteSpecial класса Range".
Jochen Arndt
Тогда у меня больше нет никаких идей кроме уже упомянутой:
Убедитесь, что ваш HTML - код не содержит многострочного содержимого.
Member 13922719
Спасибо..извините, но это невозможно, потому что пользователи могут иметь отформатированное многострочное содержимое.