Я написал приложение в C#, которое записывает некоторые данные (строки) в документ excel. Мне нужно написать несколько строк в одну ячейку. После этого я пытаюсь покрасить эти строки. В моем примере есть четыре разных строки, которые должны быть по-разному по-разному в одной ячейке. Первый должен быть синим, второй должен быть зеленым, третий должен быть черным, а последний должен быть красным. Когда я пытаюсь сделать это, как в примере, всегда первый и последний правильный, но все остальные являются ложными. Для этого проекта я использую Windows 7 Professional, Microsoft Excel 2010 и Visual Studio 2012 Ultimate. Как я могу исправить свой источник?C# excel cell multicolor text
Это мой Источник:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
namespace WindowsFormsApplication2
{
public partial class Form1 : Form
{
private Microsoft.Office.Interop.Excel.Application excel = null;
private Microsoft.Office.Interop.Excel.Workbook workbook = null;
public Microsoft.Office.Interop.Excel.Worksheet _sheet = null;
public Form1()
{
myMethod();
}
private void myMethod()
{
excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
object missing = Missing.Value;
excel.Workbooks.Add(missing);
workbook = excel.ActiveWorkbook;
workbook.Worksheets.Add(missing, missing, missing);
_sheet =
(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
_sheet.Name = "Sheet";
string[] part = { "exampleBluee", "exampleGreen", "exampleBlack", "exampleReddd" };
string[] faults = { "f1", "f2", "f3", "f4" };
_sheet.Columns.WrapText = true;
Microsoft.Office.Interop.Excel.Range position = _sheet.get_Range("A1");
position.VerticalAlignment = Microsoft.Office.Interop.Excel.Constants.xlCenter;
for (int i = 0; i < 4; i++)
{
position.Value2 += part[i] + " ";
int fehler = i;
// default color
var myColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Pink);
if (faults[fehler] == "f1")
{
myColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.RoyalBlue);
}
else if (faults[fehler] == "f2")
{
myColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Green);
}
else if (faults[fehler] == "f3")
{
myColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Black);
}
else if (faults[fehler] == "f4")
{
myColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
}
var nLenTotal = position.Value2.ToString().Length;
int lenTxt = part[i].Length;
// expected colorized text. (multicolor text in one cell)
position.Characters[nLenTotal - lenTxt, lenTxt].Font.Color = myColor;
}
((Microsoft.Office.Interop.Excel.Range)_sheet.Columns[1]).EntireRow.ColumnWidth = 15;
saveExcel();
}
public void saveExcel()
{
string appPath = System.IO.Path.GetDirectoryName(
Assembly.GetEntryAssembly().Location);
string filename = Path.Combine(appPath, "MyDocument.xlsx");
try
{
workbook.SaveAs(filename);
workbook.Close();
}
catch (Exception)
{
workbook.Close();
}
}
}
}
Посмотрите здесь: http://stackoverflow.com/questions/9469682/is-it-possible-to-do-multiple-colored-text-within-an-excel-cell –