上記画像のような「歯抜け」のエクセルがあります。空白のセルを最も近い上部の空でないセルの値で埋める、というようなことをしたかったんです。
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爆発しろと思ってるので大変助かりました!
返信削除謝謝!