2009年2月6日 星期五

C# 讀取Excel 欄位-2

因為還沒找到 如何將 文字、數字 正確讀出的方法,所以換了一種做法,
利用 dataGridView 來做處理。



















using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient; //有使用到SQL
using System.Data.OleDb; //有使用到Excel
using System.IO;


namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)
{



if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
FileInfo fi = new FileInfo(openFileDialog1.FileName);
if (!fi.Exists)
{
MessageBox.Show("匯入檔案並不存在", "注意", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}

string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + openFileDialog1.FileName + ";Extended Properties='Excel 8.0;IMEX=1;'";
OleDbConnection Conn = new OleDbConnection(strConn);
try
{
Conn.Open();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
return;
}

try
{
DataSet ds = new DataSet();

DataTable dt = Conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
if (dt.Rows[0]["TABLE_Name"].ToString().IndexOf("$") < 0)
{
dt.Rows[0]["TABLE_Name"] += "$";
}
string strSelect = "Select * From [" + dt.Rows[0]["TABLE_Name"].ToString() + "] ";
OleDbDataAdapter da = new OleDbDataAdapter(strSelect, strConn);

da.Fill(ds, dt.Rows[0]["TABLE_Name"].ToString());
da.Dispose();

ds.Tables[dt.Rows[0]["TABLE_Name"].ToString()].Rows.RemoveAt(0);

dataGridView1.DataSource = ds.Tables[dt.Rows[0]["TABLE_Name"].ToString()];
label1.Text = ds.Tables[0].Rows.Count.ToString(); //取得資料比數
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
Conn.Close();
Conn.Dispose();
}
}

沒有留言:

張貼留言