【问题标题】:C# excel cell multicolor textC# excel 单元格多色文本
【发布时间】:2015-01-01 09:11:39
【问题描述】:

我用 c# 编写了一个应用程序,它将一些数据(字符串)写入 excel 文档。我需要将几个字符串写入一个单元格。在此之后,我尝试为这些字符串着色。在我的示例中,有四个不同的字符串需要在一个单元格中以不同的颜色显示。第一个应该是蓝色的,第二个应该是绿色的,第三个应该是黑色的,最后一个应该是红色的。当我像示例中那样尝试时,第一个和最后一个总是正确的,但其他所有都是错误的。对于这个项目,我使用的是 Windows 7 Professional、Microsoft Excel 2010 和 Visual Studio 2012 Ultimate。 如何修复我的来源?

这是我的来源:

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();
            }
        }
    }
}

【问题讨论】:

标签: c# colors export-to-excel


【解决方案1】:

对于为正确文本着色的每个循环,您的代码都能正常工作。但是,当您附加文本的下一部分时,第一种颜色会增长以消耗所有文本,直到插入点。为了避免这种情况,将添加的文本与着色分开。

        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 */
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-31
    • 2013-10-18
    • 1970-01-01
    • 2019-10-11
    • 2011-08-19
    相关资源
    最近更新 更多