https://replit.com/@sworc/cs-list![]()
2023年08月04日
2020年11月26日
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 プロパティ
2020年05月02日
C#( Form ) : ウインドウ枠の無い吹き出しの作成
昔 Flex で透明ウィンドウ作った事があったので、C# でもできるだろうと調べてみたら普通にありました。凝っても仕方無いので向きの切り替えとかコンテキストメニュー等は好みで追加すればいいと思います。 オンラインで授業やるのに欲しいなぁと思い作ってみましたので、自分はこれで十分です。
エディタ部分は、richTextEditor です。( 縦スクロールバーが文字列があふれた時に表示されます )
using System;
using System.Drawing;
using System.Windows.Forms;
namespace TransForm
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
// フォームの境界線とタイトルを表示しない
this.FormBorderStyle = FormBorderStyle.None;
// 画像サイズ
this.Size = new Size(584, 396);
// 画像を読み込む( 吹き出し部分以外青 )
Bitmap bmp = new Bitmap("fu2.png");
// 透明にする色
Color tColor = Color.Blue;
// 背景画像に指定する
this.BackgroundImage = bmp;
// 透明を指定する
this.TransparencyKey = tColor;
// ウインドウを richTextBox 以外で移動できるようにする
this.MouseDown +=
new MouseEventHandler(Form1_MouseDown);
this.MouseMove +=
new MouseEventHandler(Form1_MouseMove);
}
// マウスのクリック位置
private Point mousePoint;
// マウスのボタンが押された
private void Form1_MouseDown(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
// 押された位置
mousePoint = new Point(e.X, e.Y);
}
}
// マウスのドラッグ処理
private void Form1_MouseMove(object sender, MouseEventArgs e)
{
if ((e.Button & MouseButtons.Left) == MouseButtons.Left)
{
this.Left += e.X - mousePoint.X;
this.Top += e.Y - mousePoint.Y;
}
}
}
}
2020年02月04日
C# のタプル( Visual Studio 2017 でテスト )
System.ValueTuple を NuGet でインストールする必要がありますが、値を集団で容易に扱う事ができます
using System;
// System.ValueTuple を NuGet でインストール
// https://www.nuget.org/packages/System.ValueTuple/
// プロジェクトのプロパティのビルドの詳細設定で最新 C# 言語バージョンに変更
namespace ConsoleApp_003
{
class Program
{
static void Main(string[] args)
{
// 無名
var unnamed = ("one", "two");
Console.WriteLine($"1: {unnamed.Item1}, 2: {unnamed.Item2}");
// 左辺でプロパティを定義
(string Alpha, string Beta) namedLetters = ("one", "two");
Console.WriteLine($"1: {namedLetters.Alpha}, 2: {namedLetters.Beta}");
// 右辺でプロパティを定義
var alphabetStart = (Alpha: "one", Beta: "two");
Console.WriteLine($"1: {alphabetStart.Alpha}, 2: {alphabetStart.Beta}");
// 変数でプロパティを定義
var sum = 12.5;
var count = 5;
var accumulation = (count, sum);
Console.WriteLine($"1: {accumulation.count}, 2: {accumulation.sum}");
// タプルを戻す関数 ( 1 )
Console.WriteLine($"1: {testFunc().Item1}, 2: {testFunc().Item2}, 3: {testFunc().Item3}");
// タプルを戻す関数 ( 2 )
Console.WriteLine($"1: {testFunc2().a}, 2: {testFunc2().b}, 3: {testFunc2().c}");
Console.ReadLine();
}
// ***********************************
// タプルを戻す関数 ( 1 )
// ***********************************
public static (string, int, double) testFunc()
{
return ("a", 1, 5.5);
}
// ***********************************
// タプルを戻す関数 ( 2 )
// ***********************************
public static (string a, int b, double c) testFunc2()
{
return ("a", 1, 5.5);
}
}
}
このページの PDF
2020年01月21日
C# : インターネット上の JSON ファイルのフォーマットを クラスとして定義して1行でオブジェクト化して使用する
▼ NuGet パッケージマネージャコンソールより Json.NET をプロジェクト内にインストールPM> Install-Package Newtonsoft.Json '.NETFramework,Version=v4.6.1' を対象とするプロジェクト 'ConsoleApp-002' に関して、パッケージ 'Newtonsoft.Json.12.0.3' の依存関係情報の収集を試行しています 依存関係情報の収集に 17.23 ms かかりました DependencyBehavior 'Lowest' でパッケージ 'Newtonsoft.Json.12.0.3' の依存関係の解決を試行しています 依存関係情報の解決に 0 ms かかりました パッケージ 'Newtonsoft.Json.12.0.3' をインストールするアクションを解決しています パッケージ 'Newtonsoft.Json.12.0.3' をインストールするアクションが解決されました 'nuget.org' からパッケージ 'Newtonsoft.Json 12.0.3' を取得しています。 GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/12.0.3/newtonsoft.json.12.0.3.nupkg OK https://api.nuget.org/v3-flatcontainer/newtonsoft.json/12.0.3/newtonsoft.json.12.0.3.nupkg 5 ミリ秒 Newtonsoft.Json 12.0.3 をインストールしています。 パッケージ 'Newtonsoft.Json.12.0.3' をフォルダー 'D:\user\cs\cs20\ConsoleApp-002\packages' に追加しています パッケージ 'Newtonsoft.Json.12.0.3' をフォルダー 'D:\user\cs\cs20\ConsoleApp-002\packages' に追加しました パッケージ 'Newtonsoft.Json.12.0.3' を 'packages.config' に追加しました 'Newtonsoft.Json 12.0.3' が ConsoleApp-002 に正常にインストールされました NuGet の操作の実行に 3.54 sec かかりました 経過した時間: 00:00:04.8406552※ インストール後 Newtonsoft.Json は参照済で、packages フォルダが作成されてインストールされている。 Available NuGet Distribution Versions
using Newtonsoft.Json;
using System;
using System.Net;
using System.Text;
namespace ConsoleApp_002
{
class Program
{
static void Main(string[] args)
{
string json_url = "https://lightbox.sakura.ne.jp/demo/template/basic/basic-html/project/basic-01.json";
WebClient webClient = new WebClient();
webClient.Encoding = Encoding.GetEncoding("utf-8");
string json_text = webClient.DownloadString(json_url);
Console.WriteLine(json_text);
// JSON 文字列を一括でクラスのオブシェクトに変換
MyJson data = JsonConvert.DeserializeObject<MyJson>(json_text);
Console.WriteLine(data.title);
Console.WriteLine(data.name);
Console.WriteLine(data.image);
Console.WriteLine(data.text);
Console.ReadLine();
}
// ******************************************
// 一括変換用のクラス
// ******************************************
private class MyJson
{
public string title { get; set; }
public string name { get; set; }
public string image { get; set; }
public string text { get; set; }
}
}
}
このページの PDF
2020年01月20日
C# の文法的文字列処理
文字列補間 の $ はとても便利です。$@ で文章をそのまま解りやすく構築できると思います。
また、文字列補完では、空白文字を埋める機能と書式文字列を同時に使用する事ができます。
{<interpolationExpression>[,<alignment>][:<formatString>]}
※ めったに使う事はありませんが、文字列を[] で位置指定して文字( char ) を取得できます。
using System;
using System.IO;
namespace ConsoleApp_001
{
class Program
{
static void Main(string[] args)
{
// 実行中ファイルのパス
string dir = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Console.WriteLine(dir);
// 部分文字
Console.WriteLine(dir[2].GetType());
Console.WriteLine(dir[2]);
// 逐語的リテラル文字列
string lines = @"
特殊文字を
直接表現
する方法
";
Console.WriteLine(lines);
// 文字列補間
string lines_copy = $"{lines}";
Console.WriteLine(lines);
// 文字列補間 + 逐語的リテラル文字列
lines = $@"
{dir}
C:\user\cs\cs20\ConsoleApp-001
";
Console.WriteLine(lines);
// 文字列補間幅指定(指定文字数でどちらかに寄せる)
string ok = "OK";
string double_5 = $"|{ok,-5}|{ok,5}|";
Console.WriteLine(double_5);
// 文字列補間 カンマ編集
int num = 1234567890;
string yen = $"{num,20:#,#}";
Console.WriteLine(yen);
// 配列
string[] abc = { "a", "b", "c" };
foreach( string val in abc )
{
Console.WriteLine(val);
}
// 実行停止
Console.ReadLine();
}
}
}
実行結果
D:\user\cs\cs20\ConsoleApp-001\ConsoleApp-001\bin\Debug
System.Char
\
特殊文字を
直接表現
する方法
特殊文字を
直接表現
する方法
D:\user\cs\cs20\ConsoleApp-001\ConsoleApp-001\bin\Debug
C:\user\cs\cs20\ConsoleApp-001
|OK | OK|
1,234,567,890
a
b
c
このページの PDF
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。 Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。 また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。 ※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです 対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。※ エキスパートモードで表示しています アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります
<% if:page_name eq 'archive' -%> アーカイブページでのみ表示される内容 <% /if %> <% if:page_name eq 'category' -%> カテゴリページでのみ表示される内容 <% /if %> <% if:page_name eq 'tag' -%> タグページでのみ表示される内容 <% /if %>この記述は、以下の場所で使用します![]()
|
|




※ エキスパートモードで表示しています
アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります


