2009/04/19

[Excel][C#]指定したカラムに連番を書き込む

指定したカラムに連番を書きこむ。ただし、もう一つ指定したカラムの値が変わったらまた1から振りなおす。ってな感じでエクセルを編集したかったので。
で書いたやつをちょっと書き直しただけ。
ソースはここ

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)
        {
            //こういうときローカル(関数内)関数欲しいよなー。
            //C#1.1でスマソ。
            //っつかλ欲しい。
            string path = 0 < args.Length ? args[0] : null;
            int keyCellIndex = 1 < args.Length ? int.Parse(args[1]) : 1;
            int countCellIndex = 2 < args.Length ? int.Parse(args[2]) : 1;
            int rowLimit = 3 < args.Length ? int.Parse(args[3]) : 0;
            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;
            Worksheet ws = (Worksheet)wb.ActiveSheet;
            for (int i = 1, j = 0, preCellValue = 0; i <= rowLimit; i++)
            {
                int cellValue = int.Parse((((Range)ws.Cells[i, keyCellIndex]).Text).ToString());
                if (preCellValue != cellValue)
                {
                    j = 0;
                    preCellValue = cellValue;
                }
                ws.Cells[i, countCellIndex] = ++j;
            }
            wb.Save();
            app.Quit();
        }
    }
}

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

0 件のコメント:

コメントを投稿