2012年12月25日火曜日

[.net]Excel出力する際の注意点

.netでアプリケーションを作成していると要望として挙げられるのが、
DBからExcelに出力をして欲しいと言う事。

なので、検索してDBからデータを取得してDataGridViewを作成→DataGridViewのデータをExcelへ出力をパターン化しています。

その際に注意しているのが、アーリーバインディングとレイトバインディングのどちらかを使用とする事。
私はインストール先のクライアントのOfficeのバージョンによって挙動が違うのが嫌なので、レイトバインディングでコーディングをしています。
(昔、 アーリーバインディングで痛い目を見たと言うのもある…。)

Excel 2003で動作確認をしたものが、Excel 2007でも問題無く動作確認できたので、
Excel 2010、Excel 2012でも問題なくいけそうだと思っています。

コード等については次回以降。

2012年12月18日火曜日

[.net]ある日付が第何週かを算出する関数[訂正]

SQL SERVERやExcelであの日付がその年の第何週かを求める式はあるけど、 .netだと該当するものがないので自作してみた。
PRINT DATEPART(week, '2012/12/18')
--51と表示される
 ''日付から年内の第何週かを取得する
 Public Function WeekOfYear(Byval pDateTime As DateTime) Integer
     ''日付から年間積算日を取得
     Dim DayOfYear As Integer = DateTime.Now.DayOfYear '353がセットされる
     Dim WeekNum   As Integer = (DayOfYear / 7 ) + 1

     ''1年は52週なので52週をオーバーしたら1週目にする
     ''→53週でも問題ありません
     ''If WeekNum > 52 Then
     ''    WeekNum = 1
     ''End If

     Return WeekNum
 End Function

 ''使い方

 ''1.算出したい日付をセット
 Dim DateNow   As DateTime = DateTime.Parse("2012/12/18")

 ''2.関数で第何週かを取得
 Console.WriteLine(WeekOfYear(DateNow).ToString())
 ''51と表示される 
 
今年の最終週(12/30・12/31)で計算すると53となるので、53なら1にする調整が必要かも。 
2012/12/20訂正
1/1になると、1週になるので、12/30・31が53週でも問題ありませんでした。

2012年12月8日土曜日

[.net]DataTable.Selectメソッドではまった事[追記]

DataGridViewとDataTable.Selectの組み合わせで処理をしようしてはまったのでメモ。
(2012/12/15追記有り)

処理の流れとしては
  1. DBからDataTableを取得。
  2. DataTableにチェックボックスの列を追加。
    (Boolean型でDataColumnsを追加)
  3. DataGridViewのDataSourceにDataTableをセット
  4. DataGridViewでチェックボックスをオン/オフにする
  5. 出力ボタンを押して、チェックボックスがオンのもののみDBにデータを追加
  6. チェックボックスを全て選択する/解除するボタンを作り、処理も追加する
はまった箇所は5と6。

チェックボックスがオンのものものを抜き出す処理で、
DataTable.Select("チェックボックスの列 = True")でDataRowの配列に出力が出来るのだが、
チェックボックスを全て選択すると、この配列に入る結果がチェックボックスに入れたものと一致しない。

DataGridView上の確定とずれているのかもとDataTableを調べたが、DataTable上は正しく確定されている。
仕方ないので、DataTableをFor文で回して抜き出す事に。
DataTable.Selectメソッド内でのバグかなぁ。

2012/12/15追記
スッキリはしないけど解決しました。
DataGridViewのDataSourceにDataTableをセットした後に、DataGridView.Selectを指定する。
指定した後は、正しく値が取れるようになりました。

2012年12月3日月曜日

[.net]時間計算の方法

.netで時間の加算、減算をする方法としては
  • DateTimeオブジェクトのAddメソッドを利用する
  • DateTimeオブジェクトのTicksプロパティとTimeSpan.TicksPerフィールドを使用する
例:DateTimeオブジェクトのAddメソッドを利用して時間を加算する。
 DateTime.Now.AddYears(1)        '1年を加算する
 DateTime.Now.AddMonth(1)        '1月を加算する
 DateTime.Now.AddDays(1)            '1日を加算する
 DateTime.Now.AddHours(1)        '1時間を加算する
 DateTime.Now.AddMinutes(1)        '1分を加算する
 DateTime.Now.AddSeconds(1)        '1秒を加算する
 DateTime.Now.AddMillSeconds(1)    '1ミリ秒を加算する

例:DateTimeオブジェクトのTicksプロパティとTimeSpan.TickPerフィールドを利用して時間を加算する。
 DateTime.Now.Ticks + (1 * TimeSpan.TicksPerDay)            '1日を加算する
 DateTime.Now.Ticks + (1 * TimeSpan.TicksPerHour)        '1時間を加算する
 DateTime.Now.Ticks + (1 * TimeSpan.TicksPerMinute)        '1分を加算する
 DateTime.Now.Ticks + (1 * TimeSpan.TicksPerSecond)        '1秒を加算する
 DateTime.Now.Ticks + (1 * TimeSpan.TicksPerMillSecond)    '1ミリ秒を加算する

また、Ticksプロパティを使うと、四則演算で時間計算が出来る。

例:Tikcsプロパティを使い、今の時間と、今の時間に1時間加算した差を出す。
 Dim DateTime1 As DateTime = DateTime.Now    '今の時間
 Dim DateTime2 As DateTime = New DateTime(DateTime1.Ticks + (1 * TimeSpan.TicksPerHour))    '今の時間+1時間
 DateTime2.Ticks - DateTime1.Ticks = 36,000,000,000
時間の差を求めるなら、Substractを利用しても算出が可能になる。

例:Substractを利用して、今の時間と、今の時間に1時間加算した差を出す。
 Dim DateTime1 As DateTime = DateTime.Now            '今の時間
 Dim DateTime2 As DateTime = DateTime1.AddHours(1)    '今の時間に1時間加算
 DateTime2.Substract(DateTime1).Tikcs = 36,000,000,000

2012年11月26日月曜日

[.net]文字列を日付に変換するサンプル

.NETで文字列を日付に変換する時はDate.ParseやCDateで変換をする。


 Dim dtParse1 As Date = Date.Parse("2012/11/26")
 Dim dtParse2 As Date = Date.Parse("2012年11月26日")
 Dim dtParse3 As Date = CDate("2012/11/26")

通常の変換では無理だか数値変換をすると可能になるのもある。


 '実行時にエラーとなる。
 Dim dtParse4 As Date = Date.Parse("121126")

 '実行時にエラーとならず、2012/11/26と処理される。
 Dim dtParse5 As Date = Date.Parse(Format(CInt("121126","00/00/00")))

2012年11月19日月曜日

[WP]WordPressでイベント情報サイトを作る道のりその2

WordPressをローカル環境に構築したので、徐々にお勉強。

1.WordPressで作れるのは「投稿」と「固定ページ」、分類を分けるのにはカテゴリー&タグ
投稿…日記とか
固定ページ…プロフィールとか

2.投稿時にはカスタムフィールドが便利
イベント情報発信サイトを作るのに、簡易的に入力できる方法を探してみると、
WordPressのカスタムフィールドを使用すれば 、必要事項のみを入力し、イベントのページを作成する事が出来る。

※カスタムフィールド=雛形??

3.イベント情報の参考サイトがないか?
グーグル大先生で検索をしたら参考に出来そうなサイトがあったので、参考にしてみる。

WordPressのカスタム投稿タイプでイベント情報ページを作ってみる|webOpixel

ここで、カスタム投稿タイプとなるものが出てきたので、躓く。

4.カスタム投稿とカスタムタクソノミー

WordPressでサイト設計をする時に覚えておきたいポストタイプの特徴などいろいろ|Web Design Rcipes

カスタム投稿タイプ…製品、お店紹介等のページを作るのに向いている。
普通の投稿でカテゴリーを設定をすれば済むかも知れないが、投稿する側だとこちらに投稿すれば自動的にカテゴリー訳をしてくれるはず。

カスタムタクソノミー(カスタム分類)…カテゴリー&タグでも問題ないけど、こちらの方が自由度があるっぽい?


今日のまとめ。
WordPressのページには、投稿、固定ページがあり、カテゴリー&タグで分類訳が出来る。
特定のカテゴリを纏めたい時は、カスタム投稿を使用すれば管理も簡単に出来る。
(カスタム分類も同じ様な感じ)

次は実際に作ってみる。

2012年11月18日日曜日

[.net].NETで時間→文字列変換する時に良く使用するサンプル

.NETで日時オブジェクトを文字列に変換する時に良く使う方法。

DateTime.ToStringで文字列に変換できるが、yyyy/mm/dd形式等で指定したい時の防備録。

VB.NET

<pre class="brush: vbnet;">
Dim localdt As New DateTime(2012,11,18,23,32,0)

'日付をyyyymmdd形式で表記

Console.WriteLine(localdt.ToString("yyyy/MM/dd"))

'2012/11/18

'24時間表記

Console.WriteLine(localdt.ToString("HH:mm:ss"))

'23:32:00

'12時間表記

Console.WriteLine(localdt.ToString("hh:mm:ss"))

'11:32:00

'ミリ秒まで求める

Console.WriteLine(localdt.ToString("yyyy/MM/dd HH:mm:ss.fff"))

'2012/11/18 23:32:00.000

</pre>



[WP]WordPressでイベント情報サイトを作る道のりその1

WordPressにてイベント情報サイトを作る事になったので、.netプログラマーの私が色々と防備録的にまとめていきます。

目的
イベントの情報発信サイト運営したい。
イベント情報追加は容易にいしたい。
イベント情報ページには地図等を載せたい。
他、コンテンツ(日記等)も増やしたい。

以上の事からCMSでサイトの構築を考える。

CMSでシェアが多いのはWordPressとあり、何となくWebのスキルも高めつつチャレンジする事に。

1.ローカルPCにWordPressの環境構築

ここのサイトを参考にWordPressの環境を構築

WordPress【ワードプレス】初心者の部屋~使い方知っとこ?-『最新版』XAMPP上にWordPressを簡単インストール

ローカルサーバーをXAMPPで構築してWordPressをインストールする方法|Basic Design