C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 【C#からExcel操作】特定セルのフォントカラーの変更


(過去ログ 57 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■32260 / inTopicNo.1)  【C#からExcel操作】特定セルのフォントカラーの変更
  
□投稿者/ CL-orz'3 (1回)-(2009/02/04(Wed) 07:28:32)

分類:[C#] 

初めまして。Visual C# 2008(.NET 3.5)を使用してExcel 2007の操作(自動化)のプログラムを作っています。
ある特定のセルで、そのセルにある値が負の場合はフォントカラーを赤、正ならば青という風にしたいのですが
sheet.Cells[3, 3] = "=A1-A2"; といった風にセルを操作している為、C#上から入力された値を条件式に投げて処理をするという事ができません。

考えているコードとしては、Cells[3, 3]の値を取得して適当な変数に格納し、
その変数を条件式に投げて、条件が整えばフォントを変更といったような物なのですが、
どうもうまくいきません。

疑似コードなのですが、このような感じで取得できるものなのでしょうか?
他に良い案があればご教示お願いします。

変数A = sheet.Cells[3, 3]; //セルの値(数値)を変数に格納

if(変数A<0)
{
sheet.get_Range("C3", "C3").Font.ColorIndex = 3;
}
else
{
sheet.get_Range("C3", "C3").Font.ColorIndex = 青色;
}
引用返信 編集キー/
■32262 / inTopicNo.2)  Re[1]: 【C#からExcel操作】特定セルのフォントカラーの変更
□投稿者/ biac (38回)-(2009/02/04(Wed) 08:59:00)
biac さんの Web サイト
No32260 (CL-orz'3 さん) に返信
> ある特定のセルで、そのセルにある値が負の場合はフォントカラーを赤、正ならば青という風にしたいのですが

そのセルに、 "[青]0;[赤]-0" みたいな書式を設定するのではダメですか?
引用返信 編集キー/
■32266 / inTopicNo.3)  Re[1]: 【C#からExcel操作】特定セルのフォントカラーの変更
□投稿者/ 魔界の仮面弁士 (985回)-(2009/02/04(Wed) 10:00:25)
No32260 (CL-orz'3 さん) に返信
> sheet.get_Range("C3", "C3").Font.ColorIndex = 3;

疑似コードゆえの事とは思いますが、Marshal.ReleaseComObject 対応のために、

Excel.Range rng = sheet.get_Range("C3", "C3");
Excel.Font f = rng.Font;
f.ColorIndex = 3;

の記述に改めた方が良いかと。


なお、.ColorIndex = 3; による色指定は、ブックのカラーパレット設定に
依存するため、既存ブックの編集時には注意してください。たとえば、
 book.set_Colors(3, 0xff0000);
などと設定されたブックの場合、ColorIndex = 3 は(赤ではなく)青を意味します。


> 負の場合はフォントカラーを赤、正ならば青
該当する Range に対して、
 .NumberFormat = "[Blue][>0]#,0;[Red][<0]-#,0;[Black]0"
もしくは
 .NumberFormatLocal = "[青][>0]#,0;[赤][<0]-#,0;[黒]0"
にしてみてください。

より複雑な条件指定が必要であれば、FormatConditions を使う事もできます。
引用返信 編集キー/
■32313 / inTopicNo.4)  Re[2]: 【C#からExcel操作】特定セルのフォントカラーの変更
□投稿者/ CL-orz'3 (2回)-(2009/02/04(Wed) 17:11:28)
biacさん、魔界の仮面弁士さん、レスありがとうございます。

biacさん

条件付き書式をC#で入力する方法が分からないので、
もう少し詳しく説明しては頂けないでしょうか?
つい最近、VBA関連の勉強を始めたばかりで申し訳ありません。

魔界の仮面弁士さん

コード記述の指摘ありがとうございます。
該当するコードはすべてそのように書き換えました。

> 負の場合はフォントカラーを赤、正ならば青

ここなのですが、以下のようにコードを書いて
コンパイルし、プログラム上からExcelを起動すると
例外が発生し、下記のようなメッセージが表示されます。
「Error:RangeクラスのNumberFormatプロパティを設定できません。Line:Microsoft Office Excel」

//エラーが発生するコードです。

Excel.Range rng = sheet.get_Range("C3", "C3");
rng.NumberFormat = "[Blue][>0]#,0;[Red][<0]-#,0;[Black]0";
引用返信 編集キー/
■32314 / inTopicNo.5)  Re[3]: 【C#からExcel操作】特定セルのフォントカラーの変更
□投稿者/ 魔界の仮面弁士 (988回)-(2009/02/04(Wed) 17:51:19)
2009/02/04(Wed) 18:10:52 編集(投稿者)
No32313 (CL-orz'3 さん) に返信
> 「Error:RangeクラスのNumberFormatプロパティを設定できません。Line:Microsoft Office Excel」

それでは、NumberFormatLocal では如何でしょう。


using System;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;

public partial class Program
{
    public static void Main(string[] args)
    {
        Excel.Application appExcel2007 = null;
        Excel.Workbooks books = null;
        Excel.Workbook book = null;
        Excel.Sheets sheets = null;
        Excel.Worksheet sheet = null;
        Excel.Range rng = null;
        Excel.Range rng2 = null;
        try
        {
            appExcel2007 = new Excel.ApplicationClass();
            books = appExcel2007.Workbooks;
            book = books.Add(Type.Missing);
            sheets = book.Worksheets;
            sheet = (Excel.Worksheet)sheets[1];
            appExcel2007.Visible = true;
            rng = sheet.get_Range("A1:A3", Type.Missing);
            rng.set_Value(Type.Missing, new object[,] { { 123456 }, { -123456 }, { 0 } });
            //rng.NumberFormat = "[Blue][>0]#,0;[Red][<0]-0;[Black]0";
            rng.NumberFormatLocal = "[青][>0]#,0;[赤][<0]-0;[黒]0";
            book.Saved = true;
            //appExcel2007.Quit();
        }
        finally
        {
            ReleaseObject(rng, sheet, sheets, book, books, rng2, appExcel2007);
        }
    }

    public static void ReleaseObject(params object[] objects)
    {
        foreach (object o in objects)
        {
            try
            {
                if (o != null && Marshal.IsComObject(o))
                {
                    Marshal.ReleaseComObject(o);
                }
            }
            catch {}
        }
    }
}

引用返信 編集キー/
■32319 / inTopicNo.6)  Re[4]: 【C#からExcel操作】特定セルのフォントカラーの変更
□投稿者/ CL-orz'3 (3回)-(2009/02/04(Wed) 19:54:50)
No32314 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士さん、

NumberFormatLocalでできました。
本当にありがとうございました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -