當前位置:網站首頁>WPF 導出DataGrid內容到CV文件
WPF 導出DataGrid內容到CV文件
2022-01-26 23:35:23 【flysh05】
上一篇講到了如何將DataGrid數據導出到csv 文件,這一章將如何將DataGrid中的數據導出到Excel文件中。
導出的Excel文件如下:
實現代碼如下:
創建類 ExportToExcel.cs
using Microsoft.Office;
using System.Windows.Controls;
public class ExportToExcel
{
public bool Export_to_Excel(DataGrid dataGrid, string excelFileName)
{
System.Data.DataTable dt = new System.Data.DataTable();
for (int i = 0; i < dataGrid.Columns.Count; i++)
{
//只導出可見列
if (dataGrid.Columns[i].Visibility == System.Windows.Visibility.Visible)
{
//構建錶頭
dt.Columns.Add(dataGrid.Columns[i].Header.ToString());
}
}
for (int i = 0; i < dataGrid.Items.Count; i++)
{
int columnsIndex = 0;
System.Data.DataRow row = dt.NewRow();
for (int j = 0; j < dataGrid.Columns.Count; j++)
{
if (dataGrid.Columns[j].Visibility == System.Windows.Visibility.Visible)
{
//var r = dataGrid.Items[i];
//var c = dataGrid.Items[i] as Member;
//var v = dataGrid.Columns[j].GetCellContent(dataGrid.Items[i] as Member);
//填充可見列數據
//if ((dataGrid.Items[i] != null) && (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i] as TextBlock) != null))
if (dataGrid.Items[i] != null && ( dataGrid.Items[i] as Member) !=null)
{
var M = dataGrid.Items[i] as Member;
// row[columnsIndex] = (dataGrid.Columns[j].GetCellContent(dataGrid.Items[i]) as TextBlock).Text.ToString();
if (columnsIndex == 0)
row[columnsIndex] = M.Name;
else if(columnsIndex==1)
row[columnsIndex] = M.Age;
else if (columnsIndex == 2)
row[columnsIndex] = M.Sex;
else if (columnsIndex == 3)
row[columnsIndex] = M.Pass;
else if (columnsIndex == 4)
row[columnsIndex] = M.Email;
}
else
{
row[columnsIndex] = “”;
}
columnsIndex++;
}
}
dt.Rows.Add(row);
}
if (Export_to_Table(dt, excelFileName) != null)
{
return true;
}
else
{
return false;
}
}
private string Export_to_Table(System.Data.DataTable DT, string title)
{
try
{
//創建Excel
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook ExcelBook = ExcelApp.Workbooks.Add(System.Type.Missing);
//創建工作錶(即Excel裏的子錶sheet) 1錶示在子錶sheet1裏進行數據導出
Microsoft.Office.Interop.Excel.Worksheet ExcelSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelBook.Worksheets[1];
//如果數據中存在數字類型 可以讓它變文本格式顯示
ExcelSheet.Cells.NumberFormat = “@”;
//設置工作錶名
ExcelSheet.Name = title;
//設置Sheet標題
string start = “A1”;
string end = ChangeASC(DT.Columns.Count) + “1”;
Microsoft.Office.Interop.Excel.Range _Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end);
_Range.Merge(0); //單元格合並動作(要配合上面的get_Range()進行設計)
_Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end);
_Range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
_Range.Font.Size = 22; //設置字體大小
_Range.Font.Name = “宋體”; //設置字體的種類
ExcelSheet.Cells[1, 1] = title; //Excel單元格賦值
_Range.EntireColumn.AutoFit(); //自動調整列寬
//寫錶頭
for (int m = 1; m <= DT.Columns.Count; m++)
{
ExcelSheet.Cells[2, m] = DT.Columns[m - 1].ColumnName.ToString();
start = “A2”;
end = ChangeASC(DT.Columns.Count) + “2”;
_Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end);
_Range.Font.Size = 15; //設置字體大小
_Range.Font.Bold = true;//加粗
_Range.Font.Name = “宋體”; //設置字體的種類
_Range.EntireColumn.AutoFit(); //自動調整列寬
_Range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;
}
//寫數據
for (int i = 0; i < DT.Rows.Count; i++)
{
for (int j = 1; j <= DT.Columns.Count; j++)
{
//Excel單元格第一個從索引1開始
// if (j == 0) j = 1;
ExcelSheet.Cells[i + 3, j] = DT.Rows[i][j - 1].ToString();
}
}
//錶格屬性設置
for (int n = 0; n < DT.Rows.Count + 1; n++)
{
start = “A” + (n + 3).ToString();
end = ChangeASC(DT.Columns.Count) + (n + 3).ToString();
//獲取Excel多個單元格區域
_Range = (Microsoft.Office.Interop.Excel.Range)ExcelSheet.get_Range(start, end);
_Range.Font.Size = 12; //設置字體大小
_Range.Font.Name = “宋體”; //設置字體的種類
_Range.EntireColumn.AutoFit(); //自動調整列寬
_Range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; //設置字體在單元格內的對其方式 _Range.EntireColumn.AutoFit(); //自動調整列寬
}
ExcelApp.DisplayAlerts = false; //保存Excel的時候,不彈出是否保存的窗口直接進行保存
//彈出保存對話框,並保存文件
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
sfd.DefaultExt = “.xlsx”;
sfd.Filter = “Office 2007 File|*.xlsx|Office 2000-2003 File|*.xls|所有文件|*.*”;
sfd.FileName = “ExportDemo”;
if (sfd.ShowDialog() == true)
{
if (sfd.FileName != “”)
{
ExcelBook.SaveAs(sfd.FileName); //將其進行保存到指定的路徑
// MessageBox.Show("導出文件已存儲為: " + sfd.FileName, “溫馨提示”);
}
}
//釋放可能還沒釋放的進程
ExcelBook.Close();
ExcelApp.Quit();
// PubHelper.Instance.KillAllExcel(ExcelApp);
return sfd.FileName;
}
catch (Exception)
{
// MessageBox.Show(“導出文件保存失敗!”, “警告!”);
return null;
}
}
///
/// 獲取當前列列名,並得到EXCEL中對應的列
///
///
///
private string ChangeASC(int count)
{
string ascstr = “”;
switch (count)
{
case 1:
ascstr = “A”;
break;
case 2:
ascstr = “B”;
break;
case 3:
ascstr = “C”;
break;
case 4:
ascstr = “D”;
break;
case 5:
ascstr = “E”;
break;
case 6:
ascstr = “F”;
break;
case 7:
ascstr = “G”;
break;
case 8:
ascstr = “H”;
break;
case 9:
ascstr = “I”;
break;
case 10:
ascstr = “J”;
break;
case 11:
ascstr = “K”;
break;
case 12:
ascstr = “L”;
break;
case 13:
ascstr = “M”;
break;
case 14:
ascstr = “N”;
break;
case 15:
ascstr = “O”;
break;
case 16:
ascstr = “P”;
break;
case 17:
ascstr = “Q”;
break;
case 18:
ascstr = “R”;
break;
case 19:
ascstr = “S”;
break;
case 20:
ascstr = “Y”;
break;
default:
ascstr = “U”;
break;
}
return ascstr;
}
}
在UI的後臺代碼:
private void btnExport2_Click(object sender, RoutedEventArgs e)
{
try
{
//實例方法導出到Excel
ExportToExcel exportTool = new ExportToExcel();
exportTool.Export_to_Excel(this.dg, “MyExcel”);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
測試驗證導出成功,樣式設置如上圖。
版權聲明
本文為[flysh05]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/01/202201262335226625.html
邊欄推薦
猜你喜歡
隨機推薦
- uniapp上傳圖片及組件傳值
- 瑞利年金險資金保障安全嗎?收益高不高啊?
- 華為手機USB連不上電腦的解决方法
- Flutter 2,移動金融應用開發
- 關於st25系列NFC標簽簡單介紹及st25TV系列用於門禁讀取時的注意事項總結
- 關於用ffmpeg轉手機視頻發現視頻長寬倒了的問題
- 函數 / 類模板--模板2
- 數組中的第k個最大的元素--優先級隊列、排序、堆、排序
- 單片機實例27——ADC0809A/D轉換器基本應用技術(硬件電路圖+匯編程序+C語言程序)
- Collection集合的學習
- 一場面試結束,某度員工從事Android 5年為何還是初級工程師?
- 3本書閱讀筆記【人月神話-Go語言實戰-研發能力持續成長路線】01
- PHP垃圾回收機制
- 【電子技術】什麼是LFSR?
- 死鎖?如何定比特到死鎖?如何修複死鎖?(jps和jstack兩個工具)
- 快樂寒假 22/01/20
- image
- 噴程序員?SURE?
- LDO分壓電阻計算小工具
- 面試之求一串字符串中每個字符的出現次數
- 【ISO15765_UDS&OBD診斷】-01-概述
- 【Mysql上分之路】第九篇:Mysql存儲引擎
- RHCE 第一次作業
- 2021.10.16我的第一篇博客:一切皆有可能!
- CTA-敏感行為-讀取IMEI
- 面試被問怎麼排查平時遇到的系統CPU飆高和頻繁GC,該怎麼回答?
- nuxt項目總結-綜合
- 自然語言處理學習筆記(一)
- C語言第一課
- 各比特大佬,Spark的重點難點系列暫時更新完畢
- 基於 esbuild 的 universal bundler 設計
- XCTFre逆向(四):insanity
- 理解什麼是真正的並發數
- JVM腦圖
- 【Pytorch(四)】學習如何使用 PyTorch 讀取並處理數據集
- 函數棧幀的創建與銷毀
- 構建神經網絡- 手寫字體識別案例
- 多模態生成模型ERNIE-VILG
- kotlin不容忽視的小細節
- 備戰一年,終於斬獲騰訊T3,我堅信成功是可以複制的