2014-11-05 4 views
3

Я написал приложение в 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(); 
      } 
     } 
    } 
} 
+0

Посмотрите здесь: http://stackoverflow.com/questions/9469682/is-it-possible-to-do-multiple-colored-text-within-an-excel-cell –

ответ

0

Ваш код работает правильно для каждого цикла окраски правильного текста. Однако, когда вы добавляете следующий раздел текста, первый цвет растет, чтобы потреблять весь текст до точки вставки. Чтобы избежать этого, добавьте свой текст из раскраски.

 for (int i = 0; i < 4; i++) 
     {//Add all the text to the cell 
      position.Value += part[i] + " "; 
     } 

     for (int i = 0; i < 4; i++) 
     {//Loop through and color the text sections 
      int fehler = i; 

      // default color 
      var myColor = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Pink); 

     /* Code removed for ease of display */ 
     }