1. 程式人生 > 其它 >C# 將SQLSERVER的表匯出為EXCEL

C# 將SQLSERVER的表匯出為EXCEL

第一步,需要安裝NuGet

1、點選專案中的管理 NuGet 程式包

2、搜尋並安裝 Microsoft.Office.Interop.Excel

第二步,建立EXCEL檔案

1、說明:這一步主要是針對,匯出為EXCEL檔案時,沒有物件檔案所準備的,如果已經有明確匯出的目標檔案,第二步完全可以省略

2、程式:

#region 建立EXCEL檔案
public void WriteExcel(string filename)
{
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();

//判斷指定路徑中是否存在要建立的Excel
Microsoft.Office.Interop.Excel.Workbook workBook;

workBook = excelApp.Workbooks.Add(true);

Microsoft.Office.Interop.Excel.Worksheet workSheet = workBook.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

excelApp.Visible = false;
excelApp.DisplayAlerts = false;

workBook.SaveAs(filename);
workBook.Close(false, Missing.Value, Missing.Value);

excelApp.Quit();
workSheet = null;
workBook = null;
excelApp = null;
GC.Collect();
}
#endregion

第三步,匯出到EXCEL表

1、這一步中加入了EXCEL物件檔案的確認,也就是第二個if 的內容,這一部分沒有在第二步中加入,是因為程式由此開始

2、如果程式有報錯,請用 ALT + ENTER 補充 using 部分,一般是 System.IO、System.Reflection 之類的,看清楚加就行

3、程式:

public string ExportExcel(DataSet ds, string saveFileName)
{
try
{
if (ds == null)
return "資料庫為空";

bool fileSaved = false;
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
if (xlApp == null)
{
return "無法建立Excel物件,可能您的機子未安裝Excel";
}
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
//寫入欄位
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
worksheet.Cells[1, i + 1] = ds.Tables[0].Columns[i].ColumnName;
}
//寫入數值
for (int r = 0; r < ds.Tables[0].Rows.Count; r++)
{
for (int i = 0; i < ds.Tables[0].Columns.Count; i++)
{
worksheet.Cells[r + 2, i + 1] = ds.Tables[0].Rows[r][i];
}
System.Windows.Forms.Application.DoEvents();
}
worksheet.Columns.EntireColumn.AutoFit();//列寬自適應。
if (saveFileName != "")
{
try
{
workbook.Saved = true;

       // 判斷該路徑下是否有對應檔案,沒有則建立
if (File.Exists(saveFileName))
{
workbook.SaveCopyAs(saveFileName);
}
else
{
WriteExcel(saveFileName);
workbook.SaveCopyAs(saveFileName);
}
fileSaved = true;
}
catch (Exception ex)
{
fileSaved = false;
MessageBox.Show("匯出檔案時出錯,檔案可能正被開啟!\n" + ex.Message);
}
}
else
{
fileSaved = false;
}
xlApp.Quit();
GC.Collect();//強行銷燬
if (fileSaved && System.IO.File.Exists(saveFileName))
{
//System.Diagnostics.Process.Start(saveFileName); //開啟EXCEL
MessageBox.Show("檔案儲存成功");
}
return "成功儲存到Excel";
}
catch (Exception ex)
{
return ex.ToString();
}
}

最後一步,呼叫資料庫,選擇所需的內容匯出

1、連線資料庫可能會用到 System.Data、System.Data.OleDb、System.Data.SqlClient 反正還是 ALT + ENTER

2、一定要確認資料庫是不是本地,有沒有密碼

3、程式:

//資料介面卡
SqlDataAdapter da = null;
//資料集物件
DataSet ds;
// server= ;database= ;uid= ;pwd= 下面是連線本地資料庫,所以不需要賬號密碼
private string constr = "server = ;database = ; Trusted_Connection=true";

SqlConnection con = new SqlConnection(constr);
string sqlcom = "";int Switch_Case = 0;string SaveFilePath = "";

   // switch 方法裡面 最好可以選一個變數,這樣可以達到分類搜尋資料庫和儲存的目的

   // 別的大佬應該有更好的方法,我水平有限,這裡也建議寫在 winform 中,這樣可以手動填寫或者選擇資料庫中的表
switch ( )
{
case " ":
sqlcom = "這裡寫SQL語句"; Switch_Case = 1; break;
case " ":
sqlcom = "這裡寫SQL語句"; Switch_Case = 2; break;
case " ":
sqlcom = "這裡寫SQL語句"; Switch_Case = 3; break;

     // 還可以擴充套件更多,switch 就不多做介紹了 SQL語句一般也就是 SELECT * FROM XXX 這種
default: break;
}
da = new SqlDataAdapter(sqlcom, con);
ds = new DataSet();
da.Fill(ds);

   // 這裡就是對應上面選擇的不同資料庫中的表,建立匯出的xls檔案,路徑注意格式,檔案命名規範,最好也能與上面對應
switch (Switch_Case)
{
case 1:
SaveFilePath = "D:\\case1" + DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss") + ".xls";
break;
case 2:
SaveFilePath = "D:\\case2" + DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss") + ".xls";
break;
case 3:
SaveFilePath = "D:\\case3" + DateTime.Now.ToString("yyyy-MM-dd HH.mm.ss") + ".xls";
break;
default: break;
}

   // 呼叫上面從資料庫匯出的方法,輸入兩個設定好的內容即可
ExportExcel(ds,SaveFilePath);

本文參考了以下兩個網址,十分感謝:

https://blog.csdn.net/weixin_33912246/article/details/93563525

https://www.jb51.net/article/54318.htm