2009/04/17

[C#][Excell]C#でエクセル操作

WS0638
上記画像のような「歯抜け」のエクセルがあります。空白のセルを最も近い上部の空でないセルの値で埋める、というようなことをしたかったんです。
C#で。

一般的にはVBAを使うんでしょうけども、私はVBAわからないしVB嫌いというかVB爆発しろって思ってますので書きたくありません。
それともVSTO?(* 追記参照)

横道にそれました。

で、C#で手軽にできないかなーと思ったらできました。便利。
using System;            
using Microsoft.Office;             
using Microsoft.Office.Core;             
using Excel; 

namespace Sample            
{             
    /// <summary>             
    /// Class1 の概要の説明です。             
    /// </summary>             
    class Class1             
    {             
        /// <summary>             
        /// アプリケーションのメイン エントリ ポイントです。             
        /// </summary>             
        [STAThread]             
        static void Main(string[] args)             
        {             
            if (args.Length < 3)             
            {             
                return;             
            } 

            string path = args[0];            
            int cellIndex = int.Parse(args[1]);             
            int rowLimit = int.Parse(args[2]); 

            Application app = new Excel.ApplicationClass();            
            Workbook wb = app.Workbooks.Open(path             
                ,Type.Missing, Type.Missing, Type.Missing             
                ,Type.Missing, Type.Missing, Type.Missing             
                ,Type.Missing, Type.Missing, Type.Missing             
                ,Type.Missing, Type.Missing, Type.Missing             
                ,Type.Missing, Type.Missing); 

            wb.Application.Visible = true; 

            string v = string.Empty;            
            string v2 = string.Empty;             
            Worksheet ws = (Worksheet)wb.ActiveSheet; 

            for (int i = 1; i <= rowLimit; i++)            
            {             
                string cellValue = v2 = ((Range)ws.Cells[i, cellIndex]).Text.ToString();

                if (v != v2 && v2 != string.Empty)             
                {             
                    v = cellValue;             
                } 

                ws.Cells[i, cellIndex] = v;            
            }             
            wb.Save();             
            app.Quit();             
        }             
    }             
}

ちなみにC#1.1です。面目ない。


結果はこんな感じ。しかもリアルタイムに書き換えられておもしろい。
WS0646


ソースはここのExcelCellsEmptyToUpperValue.lzhとかExcelControler.lzh。

追記

VSTOの方がよさげ。

OBA開発入門 OfficeとSharePoint Server 2007の連携によるビジネスアプリケーション構築 (マイクロソフト公式解説書)VSTOとSharePoint Server 2007による開発技術 Visual Studio 2008で構築するOBAソリューション (Programmer’s SELECTION)OBA実践講座 Excel 2007とSharePoint Server 2007によるデータ連携 (マイクロソフト公式解説書)

1 件のコメント:

  1. 私もVB爆発しろと思ってるので大変助かりました!
    謝謝!

    返信削除