Member 13922719 Ответов: 0

Как вставить форматированный текст с маркерами и интервалами в указанную ячейку в 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

Спасибо..извините, но это невозможно, потому что пользователи могут иметь отформатированное многострочное содержимое.

0 Ответов