2009/02/27

EXCELの使用している最終行と最終列を取得

using Excel = Microsoft.Office.Interop.Excel;


/// Excelオブジェクト
Excel.Application oXls;

/// ワークブックコレクション
Excel.Workbook oWBook = this.oXls.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

/// ワークシートコレクション
Excel.Sheets oSheets =oWBook.Sheets;

///ワークシート
Excel.Worksheet oSheet = (Excel.Worksheet)oWBook.ActiveSheet;

Object after = this.sheets[ oSheets .Count];
Object before = Missing.Value;

// ワークシートを取得
oSheet = (Excel.Worksheet)this.sheets.Add(before, after, 1, Excel.XlSheetType.xlWorksheet);

/// EXCELの使用している最終行を取得
oSheet.UsedRange.Rows.Count;

/// EXCELの使用している最終列を取得
oSheet.UsedRange.Columns.Count;

2009/02/25

CSVファイルをデータセットへ格納

CSVファイルをデータセットへ格納する処理を記載します。

//usingします。
using Microsoft.VisualBasic.FileIO;

//ファイル名
name = "hoge.csv";

//ファイルパス
path = "C\:test\";

//SQLを作成します
string sql = String.Format("SELECT * FROM [{0}]",name);

//接続文字列を作成します(Microsoft.Jet.OLEDB.4.0 の部分は参照設定されているファイルにより異なります)
string conString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Text;HDR=No;"";",path);
            
//コネクションの生成
OleDbConnection con = new OleDbConnection(conString);
            
//オープンします
con.Open();

//SQLを実行します
OleDbDataAdapter oda = new OleDbDataAdapter(sql, con);

//クローズ処理
con.Close();

//データテーブル作成
DataTable table = new DataTable(name);

//Fillする
oda.Fill(table);

//データセット作成
DataSet ds = new DataSet();

//データセットにデータテーブルを設定
ds.Tables.Add(table);

EXCELのファイルオープン処理

EXCELのファイルオープン処理
前提条件:using Excel = Microsoft.Office.Interop.Excel;
(※上記usingでエラーが表示される場合は、参照設定されていないか、既に「Excel」という名前空間が存在している状態となります)

//ファイル名
string excelName = "C:\\sample.xls";

 // Excelインスタンス
Excel.Application oXls 
 = new Excel.Application();

// 確認のためExcelのウィンドウを表示する
oXls.Visible = true; 

// Excelファイルをオープンする
Excel.Workbook oWBook   =  (Excel.Workbook)(oXls.Workbooks.Open(
      excelName,  // オープンするExcelファイル名
     Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
     Type.Missing, // (省略可能)ReadOnly (True / False )
     Type.Missing, // (省略可能)Format
      // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
      // 5:なし / 6:引数 Delimiterで指定された文字
      Type.Missing, // (省略可能)Password
      Type.Missing, // (省略可能)WriteResPassword
      Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
      Type.Missing, // (省略可能)Origin
       Type.Missing, // (省略可能)Delimiter
       Type.Missing, // (省略可能)Editable
       Type.Missing, // (省略可能)Notify
       Type.Missing, // (省略可能)Converter
       Type.Missing, // (省略可能)AddToMru
       Type.Missing, // (省略可能)Local
       Type.Missing  // (省略可能)CorruptLoad
));

2009/02/23

「Delegate」による非同期スレッド処理

非同期呼び出しは Delegate.BeginInvoke によって実行され、戻り値に IAsyncResultが返却されます。
このIAsyncResult を取得するにはEndInvokeを使用することにより、引数として IAsyncResult が取得できます。
デリゲートは、スレッド処理でも、引数の指定、戻り値の取得のし易いさが特徴的なので、ぜひ熟知しましょう。

// 処理の待ち合わせ
delegate void ThreadDelegate( );

class AsyncDelegateInvoke
{
public static void SampleMethod()
{
// 非同期に実行する内容
}

public static void Main()
{
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );
IAsyncResult asynresult = dlgt.BeginInvoke( null,null );
// メインスレッドで実行する内容
dlgt.EndInvoke( asynresult ); // EndInvoke による完了待ち
}
}

// IAsyncResult.IsComplete をポーリング
delegate void SampleAsyncDelegate( );

class AsyncDelegateInvoke
{
public static void ThreadDelegate()
{
// 非同期に実行する内容
}
public static void Main()
{
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );
IAsyncResult asynresult = dlgt.BeginInvoke( null,null );
// メインスレッドで実行する内容

// 完了待ち
while( !asynresult.IsComplete() ) Thread.Sleep(0);

 // 完了後の情報の引き取り
dlgt.EndInvoke( asynresult );
}
}

// 引数の指定とコールバックによる戻り値取得
delegate void ThreadDelegate( string str );

class AsyncDelegateInvoke
{
public static void SampleMethod(string str)
{
// 非同期に実行する内容
}

  //スレッド完了時に行われる処理
private static void AsyncComplete( IAsyncResult ar )
{
// スレッド完了時処理
AsyncResult asyncResult= (AsyncResult)ar;
 
ThreadDelegate dlgt = (ThreadDelegate)asyncResult.AsyncDelegate;

dlgt.EndInvoke( ar );
}


public static void Main()
{
     //インスタンス生成 
ThreadDelegate dlgt=new ThreadDelegate( SampleMethod );

//引数が複数ある場合は、カンマ区切りで複数指定する。 処理が完了するとAsyncCompleteで検知する。
AsyncCallback callback =new AsyncCallback(str , AsyncComplete );
 
     //処理実行 
IAsyncResult asynresult = dlgt.BeginInvoke( callback,null );
 
 // メインスレッドで実行する内容
}
}

ファイル書込み

C#でのファイル書き込み処理について、説明します。

1.手順
 ①ファイルパス設定
 ②ファイルの有無確認
 ③ファイルの書込み

2.コード

// ファイルフルパス設定
string fullpath = @"c:\hoge.txt";

//ファイルの生む確認をします
 if (! System.IO.File.Exists(fullpath ))
 {
        MessageBox.Show("ファイルが存在しません");

        //ファイルを作成する場合の処理 
        using (System.IO.StreamWriter sw = System.IO.File.CreateText(fullpath ))
        {
               //書き込み処理 
               sw.WriteLine("あいうえお");

               //書き込み処理 
                sw.Write("This is the ");

                //閉じる  
                sw.Close();
         }
 }

//※ファイルの有無確認は「File.Exists(fullpath )」でしたが、
//※ディレクトリの有無確認は、Directory.Exists(dirPath)で行います。

//true: 追記 / false:上書き 
appendflg = false;   

//文字コードをシフトJISにします。
System.Text. Encoding   encoder =  Encoding.GetEncoding("Shift_JIS")

//ファイルストリームインスタンスを生成(ファイルパス 、書き込みモード 、エンコード  )
System.IO. StreamWriter sw = new StreamWriter(fullPath,  appendflg ,  encoder  );

//書き込み処理 
sw.WriteLine("あいうえお");

//書き込み処理 
sw.Write("This is the ");

//閉じる 
sw.Close();

2009/02/22

ファイルパス

下記のファイルパスが設定されていると仮定して説明します。
string FullPath = "c:\test\hoge\hoge.txt" ;

 //ファイル名の取得
 string Name = System.IO.Path.GetFileName(FullPath);
 ※hoge.txt が取得できます。

 // ディレクトリ名の取得 (最後に'¥¥'は付かない)
 string DirPath =  System.IO.Path.GetDirectoryName(FullPath);
 ※c:\test\hoge が取得できます。

 //拡張子無しのファイル名の取得
 string NameWithoutExt =  System.IO.Path.GetFileNameWithoutExtension(FullPath);
 ※hoge が取得できます。

 //拡張子の取得(1文字目は'.')
 string Ext =  System.IO.Path.GetExtension(FullPath);
 ※.txt が取得できます。

2009/02/21

ドラッグアンドドロップ

Windowsアプリケーションでドラッグ&ドロップ処理の作成をします。
対象:Visual C# .NET または Visual C# 2005

1.手順
①ドロップターゲットのAllowDropプロパティをTrueに設定します。
②DragEnterイベントによりオブジェクトにドラッグされたことを検知します。
③Dropイベントによりオブジェクトにドロップされたオブジェクトを取得し、処理を行います。

※例:フォーム上にデータグリッド「dataGridView1」が、存在すると仮定し説明します。
    よって、他のオブジェクトの場合、「dataGridView1」の部分を変更して下さい。

    private System.Windows.Forms.DataGridView dataGridView1;


2.実際のコード
①VS上で、ドラッグ&ドロップしたいターゲットのオブジェクトの下記のプロパティを変更します。
これにより、ファイルなどをオブジェクト上にドラッグできるようになります。

 プロパティ dataGridView1.AllowDrop = True

②下記のイベントは、「dataGridView1」にドラックされた時に発生します。

protected void dataGridView1_DragEnter(object s, DragEventArgs e)
{
// ドラックされたデータ内にファイルが存在するか判定します。
if (e.Data.GetDataPresent(DataFormats.FileDrop))
{
//カーソルを取得(カーソルを取得しないとドロップイベントが起動しません。)
e.Effect = DragDropEffects.All;
}
}



③下記のイベントはドラッグしたオブジェクトを「dataGridView1」でドロップした際に発生します。
protected void dataGridView1_DragDrop(object s, DragEventArgs e)
{

//ドラッグされたオブジェクトからファイルパスコレクションを取得
string[] FilePaths = (string[])e.Data.GetData(DataFormats.FileDrop);

//ファイルパスコレクションから各ファイルのフルパスを取得
foreach (string FilePath in FilePaths)
{
//ファイルのフルパスを取得
System.IO.FileInfo file = new System.IO.FileInfo(FilePaths);
}
}