Как создать многоэлементную ячейку с библиотекой EPPlus для Excel
Я использую EPPlus для генерации файлов Excel.
Я имею в виду, мне нужно преобразовать текст HTML (жирный, курсив, цвет шрифта, имя, параметры размера) в Excel Cell. Я полагаю, ему нужно создать многострунную ячейку, например:
Текст ячейки - "привет!"
стиль, который я хочу:
he - bold
ll - italic
o! - red colored font
или (более сложный)
hello! - bold
ll - italic (also bold)
o! - red colored (also bold)
Я знаю о библиотеке MS OpenXML (это позволяет мне делать то, что мне нужно). Это хорошая, но более сложная библиотека для реализации.
Ответы
Ответ 1
Решено!
Я могу использовать это:
FileInfo fi = new FileInfo(@"c:\Book1.xlsx");
using (ExcelPackage package = new ExcelPackage(fi))
{
// add a new worksheet to the empty workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets["Inv"];
//Add the headers
worksheet.Cells[2, 1].IsRichText = true;
ExcelRichText ert = worksheet.Cells[2, 1].RichText.Add("bugaga");
ert.Bold = true;
ert.Color = System.Drawing.Color.Red;
ert.Italic = true;
ert = worksheet.Cells[2, 1].RichText.Add("alohaaaaa");
ert.Bold = true;
ert.Color = System.Drawing.Color.Purple;
ert.Italic = true;
ert = worksheet.Cells[2, 1].RichText.Add("mm");
ert.Color = System.Drawing.Color.Peru;
ert.Italic = false;
ert.Bold = false;
package.Save();
}
Ответ 2
По какой-то причине ответ Антона не помог мне. Мне пришлось использовать:
FileInfo fi = new FileInfo(@"c:\Book1.xlsx");
using (ExcelPackage package = new ExcelPackage(fi))
{
// add a new worksheet to the empty workbook
ExcelWorksheet worksheet = package.Workbook.Worksheets["Inv"];
//add multi-coloured text to a cell
worksheet.Cells[2, 1].IsRichText = true;
ExcelRichTextCollection rtfCollection = worksheet.Cells[2, 1].RichText;
ExcelRichText ert = rtfCollection.Add("bugaga");
ert.Bold = true;
ert.Color = System.Drawing.Color.Red;
ert.Italic = true;
ert = rtfCollection.Add("alohaaaaa");
ert.Bold = true;
ert.Color = System.Drawing.Color.Purple;
ert.Italic = true;
ert = rtfCollection.Add("mm");
ert.Color = System.Drawing.Color.Peru;
ert.Italic = false;
ert.Bold = false;
package.Save();
}
Ответ 3
Я создал метод расширения для этого, который помогает уменьшить код tad:
public static class RichtTextExtensions
{
public static ExcelRichText Add(this ExcelRichTextCollection richTextCollection,
string text, bool bold = false, bool italic = false, Color? color = null, float size = 11,
bool underline = false, string fontName = "Segoe UI Light")
{
var richText = richTextCollection.Add(text);
richText.Color = color ?? Color.Black;
richText.Bold = bold;
richText.Italic = italic;
richText.Size = size;
richText.FontName = fontName;
richText.UnderLine = underline;
return richText;
}
}
И использовать его:
var workheet = package.Workbook.Worksheets.Add( "Sheet1" );
using (ExcelRange cellRange = worksheet.Cells[1,1])
{
cellRange.RichText.Add("This is ", size: 18, underline:true);
cellRange.RichText.Add("a simple ", bold: true, size: 18, underline: true);
cellRange.RichText.Add("test ", size: 18, underline: true);
cellRange.RichText.Add("of the extension method", bold: true, size: 18, underline: true);
}
Не уверен, почему EPPlus уже не имеет чего-то подобного, или, может быть, и так, и я пропустил это.