C#建立Excel檔案並將資料匯出到Excel檔案
阿新 • • 發佈:2019-02-10
工具原料:
Windows 7,Visual Studio 2010, Microsoft Office 2007
建立解決方案
選單》新建》專案》Windows窗體應用程式:
新增相關元件:
新增兩個DataGridView,一個TextBox,兩個按鈕 ,如下圖:
新增Excel資源:
C#建立Excel檔案,這裡實際上是從資源中提取一個事先建立好的Excel檔案,檔案提取成功後,使用OleDb方法連線Excel,向Excel檔案中寫入資料。
先在資料夾中新建一個Excel檔案,在Sheet1表的第一行設定列名:
雙擊“Resources.resx”檔案開啟資原始檔檢視:
新增現有檔案,選擇剛剛建立的Excel檔案
從資源中提取Excel檔案
string excelPath = AppDomain.CurrentDomain.BaseDirectory + "Excel" + DateTime.Now.Ticks + ".xlsx"; if (System.IO.File.Exists(excelPath)) { textBox1.Text += ("檔案已經存在!"); return; } try { //從資源中提取Excel檔案 System.IO.FileStream fs = new System.IO.FileStream(excelPath, FileMode.OpenOrCreate); fs.SetLength(0); fs.Write(Properties.Resources.Excel, 0, Properties.Resources.Excel.Length); fs.Close(); fs.Dispose(); textBox1.Text = "提取Excel檔案成功!" + "\r\n"; } catch (System.Exception ex) { excelPath = string.Empty; textBox1.Text += ("提取Excel檔案失敗:" + ex.Message); textBox1.Text += ("\r\n"); Application.DoEvents(); return; }
定義連線字串
//定義OleDB連線字串
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;Persist Security Info=False;" + "data source=" + @excelPath + ";Extended Properties='Excel 12.0; HDR=yes; IMEX=10'";
OleDbConnection conn = new OleDbConnection();
conn.ConnectionString = strConn;
注意:連線字串中IMEX的值使用的是10,如果是1或2,在執行Insert Into語句時就會報“”的錯誤。
在dataGridView1中顯示Excel檔案中的所有表的資訊
DataTable oleDt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
dataGridView1.DataSource = oleDt;
dataGridView1.Show();
向"Sheet1"表中插入幾條資料,訪問Excel的表的時候需要在表名後新增"$"符號,Insert語句可以不指定列名
OleDbCommand cmd = null;
try
{
//向"Sheet1"表中插入幾條資料,訪問Excel的表的時候需要在表名後新增"$"符號,Insert語句可以不指定列名
cmd = new OleDbCommand("Insert Into [Sheet1$] Values('abc', 'bac', '0', '123456', 'test','測試','aa')", conn);//(A,B,C,D,E,F,G)
cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery();
cmd.ExecuteNonQuery();
}
catch (System.Exception ex)
{
textBox1.Text += ("插入資料失敗:" + ex.Message);
textBox1.Text += ("\r\n");
}
在dataGridView2中顯示錶"Sheet1"的內容,訪問Excel的表的時候需要在表名後新增"$"符號
cmd = new OleDbCommand("Select * From [Sheet1$]", conn);
OleDbDataAdapter adp = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
adp.Fill(ds);
dataGridView2.DataSource = ds.Tables[0];
遍歷Schema的內容
DataTable dt = conn.GetSchema();
for (int i = 0; i < dt.Columns.Count; i++)
{
textBox1.Text += dt.Columns[i].Caption;
if (i + 1 < dt.Columns.Count)
{
textBox1.Text += ",";
}
}
for (int j = 0; j < dt.Rows.Count; j++)
{
for (int i = 0; i < dt.Columns.Count; i++)
{
if (dt.Rows[j][dt.Columns[i]] != null)
{
textBox1.Text += dt.Rows[j][dt.Columns[i]].ToString();
}
else
{
textBox1.Text += "null";
}
if (i + 1 < dt.Columns.Count)
{
textBox1.Text += ",";
}
}
textBox1.Text += ("\r\n");
}
關閉Excel資料連線
if (conn.State != ConnectionState.Closed)
{
try
{
conn.Close();
}
catch (System.Exception ex)
{
textBox1.Text += ("關閉Excel資料連線:" + ex.Message);
textBox1.Text += ("\r\n");
}
}
開啟檔案目錄
System.Diagnostics.Process.Start("explorer.exe", AppDomain.CurrentDomain.BaseDirectory);