上記画像のような「歯抜け」のエクセルがあります。空白のセルを最も近い上部の空でないセルの値で埋める、というようなことをしたかったんです。
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です。面目ない。
結果はこんな感じ。しかもリアルタイムに書き換えられておもしろい。
ソースはここのExcelCellsEmptyToUpperValue.lzhとかExcelControler.lzh。
私もVB爆発しろと思ってるので大変助かりました!
返信削除謝謝!