C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する



Range オブジェクトの作成に数値を使用します

プログラミングで処理を行うので、Range("A1:A20") というような表現を使わずに、Cells(行,列) を使って Range オブジェクトを作成しています。
using System;

namespace excel_2020_11_26
{
	class Program
	{
		static void Main(string[] args)
		{
			// Excel アプリケーション
			dynamic ExcelApp = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
			// Excel のパス
			string path = Environment.CurrentDirectory + @"\sample.xlsx";

			// Excel を表示( 完成したらコメント化 )
			ExcelApp.Visible = true;
			// 警告を出さない
			ExcelApp.DisplayAlerts = false;

			try
			{
				// ****************************
				// ブック追加
				// ****************************
				dynamic Book = ExcelApp.Workbooks.Add();

				// 通常一つのシートが作成されています
				dynamic Sheet = Book.Worksheets(1);

				// ****************************
				// シート名変更
				// ****************************
				Sheet.Name = "C#の処理";

				// ****************************
				// セルに値を直接セット
				// ****************************
				for (int i = 1; i <= 10; i++)
				{
					Sheet.Cells(i, 1).Value = "処理 : " + i;
				}

				// ****************************
				// 1つのセルから
				// AutoFill で値をセット
				// ****************************
				Sheet.Cells(1,2).Value = "子";
				// 基となるセル範囲
				dynamic SourceRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(1, 2));
				// オートフィルの範囲(基となるセル範囲を含む )
				dynamic FillRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(10, 2));
				SourceRange.AutoFill(FillRange);


				// ****************************
				// 保存
				// ****************************
				Book.SaveAs(path);
			}
			catch (Exception ex)
			{
				ExcelApp.Quit();
				System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
				Console.WriteLine(ex.Message);
				return;
			}

			ExcelApp.Quit();
			// 解放
			System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);

			Console.WriteLine("処理を終了します");

		}
	}
}


関連する記事

JScript : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する

関連する Microsoft ドキュメント

Application オブジェクト Workbook オブジェクトのコレクション Workbook オブジェクト Worksheet オブジェクトのコレクション Worksheet オブジェクト Cells プロパティ
C#, Excel

JScript : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する




Range オブジェクトの作成に数値を使用します

プログラミングで処理を行うので、Range("A1:A20") というような表現を使わずに、Cells(行,列) を使って Range オブジェクトを作成しています。
// ****************************
// 初期処理
// ****************************
WScript.Echo( "処理を開始します" );
var WshShell = new ActiveXObject("WScript.Shell");
var ExcelApp = new ActiveXObject( "Excel.Application" );

// デバッグ時は、Excel の本体を表示させて状況が解るようにする
ExcelApp.Visible = true;
// UI でチェックさせるようなダイアログを表示せずに実行する
ExcelApp.DisplayAlerts = false;

try {

	// ****************************
	// ブック追加
	// ****************************
	var Book = ExcelApp.Workbooks.Add();

	// 通常一つのシートが作成されています
	var Sheet = Book.Worksheets( 1 );

	// ****************************
	// シート名変更
	// ****************************
	Sheet.Name = "JScriptの処理";

	// ****************************
	// セルに値を直接セット
	// ****************************
	for( var i = 1; i <= 10; i++ )
	{
		Sheet.Cells(i, 1) = "処理 : " + i;
	}

	// ****************************
	// 1つのセルから
	// AutoFill で値をセット
	// ****************************
	Sheet.Cells(1, 2) = "子";
	// 基となるセル範囲
	var SourceRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(1,2));
	// オートフィルの範囲(基となるセル範囲を含む )
	var FillRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(10,2));
	SourceRange.AutoFill(FillRange);

	// ****************************
	// 保存
	// ****************************
	Book.SaveAs( WshShell.CurrentDirectory + "\\sample.xlsx" );
 
} catch (error) {
	ExcelApp.Quit();
	ExcelApp = null;
	WshShell.Popup(error.description);
	WScript.Quit();	
}

ExcelApp.Quit();
ExcelApp = null;

// ****************************
// ファイルの最後
// ****************************
WshShell.Popup("処理を終了します");

関連する記事

JScript : Visual Studio Code で、WSH を使用する準備

JScript でエラーが発生した行を知る方法

実行プログラムが cscript.exe や wscript.exe の場合、try ~ catch 内のエラー発生の行番号を知る事ができないので、以下の手順で処理します。
1) 拡張子を hta に変更する
2) WScript を使った実行をコメントにする
3) ソースの先頭に <script> ソースの最後に </script> を記述する
4) さらにソースの先頭に <meta http-equiv="x-ua-compatible" content="ie=edge"> を記述する
5) catch の中で、error.stack を表示する
6) エクスプローラからこのソースをダブルクリックする
    ( HTML アプリケーションホストで実行させる )




.hta 用コード

<meta http-equiv="x-ua-compatible" content="ie=edge">
<script>
// ****************************
// 初期処理
// ****************************
//WScript.Echo( "処理を開始します" );
var WshShell = new ActiveXObject("WScript.Shell");
var ExcelApp = new ActiveXObject( "Excel.Application" );

// デバッグ時は、Excel の本体を表示させて状況が解るようにする
ExcelApp.Visible = true;
// UI でチェックさせるようなダイアログを表示せずに実行する
ExcelApp.DisplayAlerts = false;

try {

    // ****************************
    // ブック追加
    // ****************************
    var Book = ExcelApp.Workbooks.Add();

    // 通常一つのシートが作成されています
    var Sheet = Book.Worksheets( 1 );

    // ****************************
    // シート名変更
    // ****************************
    Sheet.Name = "JScriptの処理";

    // ****************************
    // セルに値を直接セット
    // ****************************
    for( var i = 1; i <= 10; i++ )
    {
        Sheet.Cells(i, 1) = "処理 : " + i;
    }

    // ****************************
    // 1つのセルから
    // AutoFill で値をセット
    // ****************************
    Sheet.Cells(1, 2) = "子";
    // 基となるセル範囲
    var SourceRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(1,2));
    // オートフィルの範囲(基となるセル範囲を含む )
    var FillRange = Sheet.Range(Sheet.Cells(1, 2), Sheet.Cells(10,2));
    SourceRange.utoFill(FillRange);

    // ****************************
    // 保存
    // ****************************
    Book.SaveAs( WshShell.CurrentDirectory + "\\sample.xlsx" );


} catch (error) {
    ExcelApp.Quit();
    ExcelApp = null;
    WshShell.Popup(error.description + error.stack);
    WScript.Quit();    
}

ExcelApp.Quit();
ExcelApp = null;

// ****************************
// ファイルの最後
// ****************************
WshShell.Popup("処理を終了します");
</script>


関連する Microsoft ドキュメント

Application オブジェクト Workbook オブジェクトのコレクション Workbook オブジェクト Worksheet オブジェクトのコレクション Worksheet オブジェクト Cells プロパティ

JScript : Visual Studio Code で、WSH を使用する準備

Visual Studio Code は、基本的には UTF-8 で記述され、Shift_JIS でソースコードを書いて運用するにはひと工夫が必要になります。( そもそも、Shift_JIS の自動判定が完全ではありません )

1) Visual Studio Code の設定

設定タブを表示させて設定の検索フィールドに『encoding』と入力すると、Auto Guess Encoding が表示されるのでチェックします。( これは、settings.json に "files.autoGuessEncoding": true と書き込む処理となります ) これによって、テキストファイルのキャラクタセットを自動で判定するようになりますが、残念ながらテキストの内容によって失敗する事が多々あるので判定がうまく行くようにテンプレートを作成します。

2) JScript 用テンプレート

いろいろ試してみて Shift_JIS と判定してくれるようなコメントを作成し、ついでに WScript.Shell オブジェクトを作成しておいて、実行の終了時にメッセージボックスを出すようにしています。
// ****************************
// 初期処理
// ****************************
WScript.Echo( "処理を開始します" );
var WshShell = new ActiveXObject("WScript.Shell");




// ****************************
// ファイルの最後
// ****************************
WshShell.Popup("処理を終了します");
オブジェクトの作成は『WScript.CreateObject("WScript.Shell")』でも可能ですが、HTML アプリケーションに転用してコードを再利用する目的で、『new ActiveXObject("WScript.Shell")』を使用しています

3) tasks.json の配置

実行フォルダに、.vscode フォルダを作成して tasks.json をセッティングする必要があります。Visual Studio Code の UI から tasks.json を作成する処理( Configure Task )は回りくどい上にどうせ変更しなくてはならないので、一つ作成しておいて新しいフォルダにコピーして運用するといいでしょう。 tasks.json を正しく設定すると、『ビルドタスクの実行 ( CTRL + SHIFT + B )』で、開いているソースコードを cscript.exe で実行して Visual Studio Code のターミナルで結果を知る事ができます。 この設定では、実行後フォーカスがターミナルに移動するので、何かキーを押せばターミナルを閉じる事ができます。
{
	"version": "2.0.0",
	"presentation": {
		"focus": true
	},	
	"tasks": [
		{
			"label": "WSH",
			"type": "shell",
			"args": ["${file}"],
			"group": {
				"kind": "build",
				"isDefault": true
				},
			"command": "cscript"
		}
	]
}





Java : Apache POI で最低限の処理を標準化( ここではワークブックは新規作成 )

最新の Excel( .xslx ) 用 XSSF に必要な jar

Apache POI Apache Commons Collections Apache Commons Compress 4.1 ドキュメント

サンプル

オーバーロードを使用して、できるだけ cell というメソッドでできるようにしてみました。Microsoft の仕様に合わせて行や列を 1 始まりにしたかったという意図もあります。
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.RegionUtil;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbookFactory;

public class Main {

    private static XSSFWorkbook book;
    private static XSSFSheet  sheet;

    // *****************************************************
    // エントリポイント
    // *****************************************************
    public static void main(String[] args) {
        try {
            // ****************************
            // ブック作成
            // ****************************
            book = XSSFWorkbookFactory.createWorkbook();

            // ****************************
            // シート作成
            // ****************************
            sheet = book.createSheet("Javaの処理");

            // ****************************
            // セルに値を直接セット
            // ****************************
            for (int i = 1; i <= 10; i++)
            {
                cell( sheet, i, 1, String.format("処理 : %d", i ));
            }

            // ****************************
            // セルの幅( 3列目 )
            // ****************************
            cellWidth( sheet, 3, 6000 );

            // ****************************
            // セルの結合
            // ****************************
            cell( sheet, 1, 3, 1, 5 );
            // 結合されたセルに値をセット
            cell( sheet, 1, 3, "結合されたセル" );
            
            // ****************************
            // 日付のセット
            // ****************************
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd");
            cell( sheet, 3, 3, dateFormat.parse("2020/11/27") );

            // ****************************
            // 値のセット
            // ****************************
            cell( sheet, 4, 3, 1000 );
            cell( sheet, 5, 3, 1234567890 );
            cell( sheet, 6, 3, "日本語" );
            cell( sheet, 7, 3, "ABCDEFG abcdefg" );

            // ****************************
            // 式のセット
            // ****************************
            getCell( sheet, 8, 3 ).setCellFormula( "A1" );

            // ****************************
            // 罫線
            // ****************************
            cell( sheet, 3, 3, 10, 5, BorderStyle.DOUBLE );

            // ****************************
            // セルの値を表示
            // ****************************
            for (int i = 1; i <= 10; i++)
            {
                System.out.println( cell( sheet, i, 3 ) );
            }

            // ****************************
            // 書き込み用のファイルストリーム
            // ****************************
            FileOutputStream fos = new FileOutputStream("sample.xlsx");
            
            // ****************************
            // 保存と終了
            // ****************************
            book.write(fos);
            book.close();

        } catch (Exception e) {

            e.printStackTrace();

        }

    }

    // ****************************
    // セル( XSSFCell ) を取得
    // ****************************
    static XSSFCell getCell(XSSFSheet sheet, int row, int col) {

        XSSFRow xslRow = sheet.getRow(row - 1);
        if ( xslRow == null ) {
            // 行を作成
            xslRow = sheet.createRow( row - 1 );
        }

        XSSFCell cell = xslRow.getCell( col - 1 );
        if ( cell == null ) {
            // セルを作成
            cell = xslRow.createCell( col - 1 );
        }
        return cell;

    }
    // ****************************
    // セルに書き込む
    // ****************************
    // 文字列
    static void cell(XSSFSheet sheet, int row, int col, String value) {

        XSSFCell cell = getCell(sheet, row, col);
        cell.setCellValue(value);

    }
    // 数値
    static void cell(XSSFSheet sheet, int row, int col, double value) {

        XSSFCell cell = getCell(sheet, row, col);
        cell.setCellValue(value);

    }
    // 日付 : BuiltinFormats で定義された値(14) を使用
    static void cell(XSSFSheet sheet, int row, int col, Date value) {

        XSSFCell cell = getCell(sheet, row, col);
        XSSFCellStyle style = sheet.getWorkbook().createCellStyle();
        // Class BuiltinFormats より "m/d/yy"
        style.setDataFormat(14);
        cell.setCellStyle(style);
        cell.setCellValue(value);

    }
    
    // ****************************
    // セル読み込む
    // ****************************
    static String cell(XSSFSheet sheet, int row, int col) {

        XSSFRow xslRow = sheet.getRow(row - 1);
        if ( xslRow == null ) {
            return "";
        }

        XSSFCell cell = xslRow.getCell( col - 1 );
        if ( cell == null ) {
            return "";
        }

        CellType type = cell.getCellType();
        // 文字列
        if ( type == CellType.STRING ) {
            return cell.getStringCellValue();
        } 
        if ( type == CellType.NUMERIC ) {
            // 日付
            if( org.apache.poi.ss.usermodel.DateUtil.isCellDateFormatted(cell) ) {
                SimpleDateFormat sdf = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss" );
                return sdf.format( cell.getDateCellValue() );
            }
            // 数値
            else {
                return String.format("%f", cell.getNumericCellValue());
            }
        } 
        // 式
        if ( type == CellType.FORMULA ) {
            return cell.getCellFormula();
        }
        
        String result = cell.getRawValue();
        if ( result == null ) {
            result = "";
        }

        return result;

    }

    // ****************************
    // セルの幅
    // ****************************
    static void cellWidth(XSSFSheet sheet, int col, int width) {

        sheet.setColumnWidth(col-1, width);

    }

    // ****************************
    // セルの結合
    // ****************************
    static void cell(XSSFSheet sheet, int row1, int col1, int row2, int col2) {

        sheet.addMergedRegion( new CellRangeAddress(row1-1, row2-1, col1-1, col2-1) );

    }

    // ****************************
    // 範囲の外側の罫線
    // ****************************
    static void cell(XSSFSheet sheet, int row1, int col1, int row2, int col2, BorderStyle borderStyle ) {

        CellRangeAddress region = new CellRangeAddress(row1-1, row2-1, col1-1, col2-1);

        RegionUtil.setBorderTop( borderStyle, region, sheet );
        RegionUtil.setBorderBottom( borderStyle, region, sheet );
        RegionUtil.setBorderLeft( borderStyle, region, sheet );
        RegionUtil.setBorderRight( borderStyle, region, sheet );

    }

}

実行結果

読込みは以下のような感じで

XSSFWorkbook book = XSSFWorkbookFactory.createWorkbook(new FileInputStream("sample.xlsx"));

関連する記事

JScript : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する C# : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する Python : Excel の新しいブックのデフォルトのシートのセルに直接値をセットして、オートフィルを Range オブジェクトから実行する

外字がとにかく豊富な、にしき的フォント 『 Nishiki-teki 』



ダウンロードページ / 著作

にしき的フォント - TYPVS LITTERARVM NISICIAE

制作者 : うみほたる

ライセンス

創作物その他もろもろにご自由にお使いください。

ファイル

nishiki-teki.ttf

概要 ( 制作者より )

伺かのフリーシェル「にしき」をイメージしたUnicode準拠のフォントです。現在のところ、ラテン文字、ギリシア文字、キリル文字、アルメニア文字、ヘブライ文字、オガム文字、ルーン文字、ひらがな、カタカナ、少々の漢字、リス文字、オーセージ文字、音声記号、ブライユ点字、その他いろいろな記号などを収録しています。加えて、私用領域には以下のような人工文字の類 (テングワール、キアス、ユニフォン、ソルレソル、ヴィジブルスピーチ、アーヴ、アイハ、クリンゴン、沖縄方言用・気仙方言(ケセン語)用・台湾語用の仮名など) やさまざまな記号などを収めてあります。より詳しくはこちらのPDFファイルをご覧ください。

補足 ( この記事固有 )

まだ全ての外字を確認していませんが、PHP の GD で表現できるのが &#xffff; までなので、ImageMagick で &#xf0000; 以降を表現できるように、フリーフォントでボタン作成を改造しました。冒頭の画像は、クリンゴン文字ですが、F8FF までなので、GD で表示できます。


※ サービスで再現


※ サービスで再現



ラノベPOP



ダウンロードページ / 著作

ラノベPOPフォントのフリーフォントダウンロード | フォントな。無料日本語フリーフォント

制作者 : フォントな(Kato Masashi)
  • にくまるフォント
  • ふぉんとうは怖い明朝体
  • ロゴたいぷゴシック
  • 
    ライセンス
    
    作成した印刷物およびデジタル・コンテンツにつき、その商用・非商用にかかわらず放送、通信、各種記録メディアなどの媒体の形式も問わず、使用をすることができます。ただし、これはM+のライセンスのもとにあります。
    
    ファイル
    
    ラノベPOP.otf
    ※ ラノベPOP.ttf も同梱されていますが、サポート外とされています
    
    概要 ( 制作者より )
    
    ロゴデザインやタイトルロゴ、見出し向けの漢字も含まれる日本語フリーフォントになります。軽やかで弾むような、楽しい雰囲気のキュートなPOP体フォントです。デザインされつつも、マジックペンで勢いよく書いたような要素を加えています。
    
    補足 ( この記事固有 )
    
    ひらがな・カタカナ部分のデザインが、ラノベPOP としての著作部分です。ですから、フリーフォントで簡単ロゴ作成の、デュアルページを使うと他の漢字書体と組み合す事ができます。
    
    
    ※ デュアルページで再現
    
    
    
    
    

    チェックポイントフォント / 『アメリカ横断ウルトラクイズ』をイメージした和文総合書体

    
    
    フリーフォントで簡単ロゴ作成にて、オンラインでフォント画像を作成できます。
    
    
    
    一般的な日本のフリーフォントです。
    
    チェックポイントフォントはフリーフォントです。
    
    かつて日本テレビ系列で放送されていた、懐かしのクイズ番組『アメリカ横断ウルトラクイズ』をイメージした和文総合書体として、・ひらがな ・カタカナ(タイトルロゴ「ウルトラクイズ」風) ・英数字 ・記号 ・漢字(JIS第一/第二水準一式、IBM拡張文字一式+α)の要素をカバーしています。
    
    チェックポイントフォント
    
    ウェブサイトや印刷物、動画などでの使用のほか、商用利用(同人誌などでの使用)についても、特に制限は設けておりません。ご自由にお使いいただけます。但し、著作権表示を改変しての二次配布はご容赦ください。
    
    使用許可連絡も必要ございませんが、よろしければ事後でも結構ですので、Twitterなどでご一報いただければありがたいとの事です。
    
    ファイル名
    
    CP Font.ttf
    ※ ttf フォーマットで配布されています。
    ( OpenType Edition もあります )
    
    書体の特徴
    
    手作り感がとても大きい、太い文字のフォントです。その名の『チェックポイント』から解りますが、ウルトラクイズの『チェックポイント』で使われて文字を元に作られています。
    
    
    
    

    VBScript : WshShell.Runによる 【外部プログラムの実行】 のバリエーション

    外部プログラムの実行

    VBScript を何の為に使うかという場合、最も一般的に利用価値の高いのは、やはりプログラムの実行です。 わりと簡単に使えるのですが、プログラム(言語)でもあるので、専門知識が無ければ、なかなか難しい部分もあります。しかし、実行だけで言えば、2行で書けるので、その場合に「できること」を知っておくと絶対に得をします。

    同期処理(コマンドプロンプトウインドウを開かない)

    Set WshShell = WScript.CreateObject("WScript.Shell")
    Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", 0, True )
    
    
    
    

    同期処理(コマンドプロンプトウインドウを開く)

    Set WshShell = WScript.CreateObject("WScript.Shell")
    Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", , True )
    
    
    
    
    

    非同期処理

    Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage",0 ) でコマンドプロンプトウインドウは開きません
    Set WshShell = WScript.CreateObject("WScript.Shell")
    WshShell.Run( "zip.exe -r homepage D:\nifty\homepage" )
    
    
    
    

    関連するページ

    WshShell.Run による外部プログラムの実行 :外部プログラムの実行

    VBScript : GUID取得

    Scriptlet.TypeLib で GUID を取得できます
    
    

    ▼ InternetExplorer.Application でクリップボードへコピーする

    ' GUID 取得用
    Set TypeLib = CreateObject("Scriptlet.TypeLib")
    
    ' クリップボード用
    ' ※ HTA 等では直接 window.clipboardData より実行
    ' ※ するように書き換える必要があります
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Navigate("about:blank")
    Do While objIE.Busy
    	' 100 ミリ秒
    	Wscript.Sleep 100
    Loop
    
    Call objIE.document.parentWindow.clipboardData.SetData( "Text", TypeLib.Guid & "" )
    objIE.Quit
    
    WScript.Echo "クリップボードにコピーしました" & vbCrLf & vbCrLf & TypeLib.Guid
    
    
    
    

    ▼ 自分でクリップボードへコピーする

    ' GUID 取得用
    Set TypeLib = CreateObject("Scriptlet.TypeLib")
    
    Call InputBox("コピーして使用して下さい","新しい GUID を取得しました",TypeLib.Guid)
    
    
    
    
    

    ▼ コマンドブロンプトを使う( clip.exe )

    sCommand = "cmd /c echo Set TypeLib=CreateObject(""Scriptlet.TypeLib""):Wscript.echo TypeLib.Guid>%temp%\_.vbs&cscript.exe /NOLOGO %temp%\_.vbs | clip"
    
    Set WshShell = WScript.CreateObject("WScript.Shell")
    ' 同期処理(コマンドプロンプトウインドウを開かない)
    Call WshShell.Run( sCommand, 0, True )