wpf 導出Excel

来源:https://www.cnblogs.com/pu-tao-zi/archive/2018/05/18/wpf.html
-Advertisement-
Play Games

找了好多都有問題,這個可以分享給到家 轉自:https://www.cnblogs.com/kmust/p/4412228.html ...


 

  1 private void Button_Click_1(object sender, RoutedEventArgs e)
  2 {
  3 
  4 ExportDataGridSaveAs(true, this.data);
  5 }
  6 #region wpf客戶端 導出DataGrid數據到Excel
  7 
  8 /// <summary>
  9 /// CSV格式化
 10 /// </summary>
 11 /// <param name="data">數據</param>
 12 /// <returns>格式化數據</returns>
 13 private static string FormatCsvField(string data)
 14 {
 15 return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
 16 }
 17 
 18  
 19 
 20 /// <summary>
 21 /// 導出DataGrid數據到Excel
 22 /// </summary>
 23 /// <param name="withHeaders">是否需要表頭</param>
 24 /// <param name="grid">DataGrid</param>
 25 /// <param name="dataBind"></param>
 26 /// <returns>Excel內容字元串</returns>
 27 public static string ExportDataGrid(bool withHeaders, System.Windows.Controls.DataGrid grid, bool dataBind)
 28 {
 29 try
 30 {
 31 var strBuilder = new System.Text.StringBuilder();
 32 var source = (grid.ItemsSource as System.Collections.IList);
 33 if (source == null) return "";
 34 var headers = new List<string>();
 35 List<string> bt = new List<string>();
 36 
 37 foreach (var hr in grid.Columns)
 38 {
 39 // DataGridTextColumn textcol = hr. as DataGridTextColumn;
 40 headers.Add(hr.Header.ToString());
 41 if (hr is DataGridTextColumn)//列綁定數據
 42 {
 43 DataGridTextColumn textcol = hr as DataGridTextColumn;
 44 if (textcol != null)
 45 bt.Add((textcol.Binding as Binding).Path.Path.ToString()); //獲取綁定源
 46 
 47 }
 48 else if (hr is DataGridTemplateColumn)
 49 {
 50 if (hr.Header.Equals("操作"))
 51 bt.Add("Id");
 52 }
 53 else
 54 {
 55 
 56 }
 57 }
 58 strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
 59 foreach (var data in source)
 60 {
 61 var csvRow = new List<string>();
 62 foreach (var ab in bt)
 63 {
 64 string s = ReflectionUtil.GetProperty(data, ab).ToString();
 65 if (s != null)
 66 {
 67 csvRow.Add(FormatCsvField(s));
 68 }
 69 else
 70 {
 71 csvRow.Add("\t");
 72 }
 73 }
 74 strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
 75 // strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\t");
 76 }
 77 return strBuilder.ToString();
 78 }
 79 catch (Exception ex)
 80 {
 81 // LogHelper.Error(ex);
 82 return "";
 83 }
 84 }
 85 public class ReflectionUtil
 86 {
 87 public static object GetProperty(object obj, string propertyName)
 88 {
 89 PropertyInfo info = obj.GetType().GetProperty(propertyName);
 90 if (info == null && propertyName.Split('.').Count() > 0)
 91 {
 92 object o = ReflectionUtil.GetProperty(obj, propertyName.Split('.')[0]);
 93 int index = propertyName.IndexOf('.');
 94 string end = propertyName.Substring(index + 1, propertyName.Length - index - 1);
 95 return ReflectionUtil.GetProperty(o, end);
 96 }
 97 object result = null;
 98 try
 99 {
100 result = info.GetValue(obj, null);
101 }
102 catch (TargetException)
103 {
104 return "";
105 }
106 return result == null ? "" : result;
107 }
108 }
109 /// <summary>
110 /// 導出DataGrid數據到Excel為CVS文件
111 /// 使用utf8編碼 中文是亂碼 改用Unicode編碼
112 /// 
113 /// </summary>
114 /// <param name="withHeaders">是否帶列頭</param>
115 /// <param name="grid">DataGrid</param>
116 public static void ExportDataGridSaveAs(bool withHeaders, System.Windows.Controls.DataGrid grid)
117 {
118 try
119 {
120 string data = ExportDataGrid(true, grid, true);
121 var sfd = new Microsoft.Win32.SaveFileDialog
122 {
123 DefaultExt = "csv",
124 Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
125 FilterIndex = 1
126 };
127 if (sfd.ShowDialog() == true)
128 {
129 using (Stream stream = sfd.OpenFile())
130 {
131 using (var writer = new StreamWriter(stream, System.Text.Encoding.Unicode))
132 {
133 data = data.Replace(",", "\t");
134 writer.Write(data);
135 writer.Close();
136 }
137 stream.Close();
138 }
139 }
140 MessageBox.Show("導出成功!");
141 }
142 catch (Exception ex)
143 {
144 // LogHelper.Error(ex);
145 }
146 }
147 
148 #endregion 導出DataGrid數據到Excel
149 
150  

 找了好多都有問題,這個可以分享給到家

轉自:https://www.cnblogs.com/kmust/p/4412228.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 專業定製仿百度文庫網站系統,文庫網站系統源碼,文庫‌‌網站建設開發,支持電腦版+手機版+微信版+小程式版+APP版,由10年的技術團隊專業定製,需要的朋友可以聯繫我們。網站採用:PHP+MySQL+thinkPHP框架(可定製)支持doc、docx 、ppt、 pptx、 xls、 xlsx、 pd ...
  • 專業定製交友網站開發,交友平臺網站建設,婚戀網站平‌‌台開發建設,可仿百合網,世紀佳緣網,支持電腦版+手機版+微信版+小程式版+APP版,由10年的技術團隊專業定製,需要的朋友可以聯繫我們。網站採用:PHP+MySQL+thinkPHP框架(可定製) 詳細說明:http://bbs.lvchakej ...
  • Numpy 通過觀察Python的自有數據類型,我們可以發信啊Python原生並不提供多為數組的操作,那麼為了處理矩陣,就需要使用第三方提供的相關的包。 NumPy 是一個非常優秀的提供矩陣操作的包。NumPy的主要目標,就是提供多維數組,從而實現矩陣操作。 NumPy’s main object ...
  • Visual Stuido 2017中使用正則修改部分內容 ...
  • 學習內容:C#;學習書籍:圖解教程(中文第四版)。 目錄:第二章 C#編程概述 > 2.7 從程式中輸出文本 > 2.7.5格式化數字字元串 學習感受: 我現在的工作中還沒有遇見這些的使用。 ...
  • ASP.NET程式中的web.config文件中,在appSettings這個配置節中能夠保存一些配置,比如, 但是這些配置都是單個字元串信息,在某些情況下,無法做到靈活配置。 針對這種情況,使用.Net Framework提供的自定義系統配置方式來進行改善。自定義系統配置方式主要使用到以下幾個類: ...
  • 在asp.net項目中,添加一個【一般處理程式】來處理請求是很自然的事,這樣會得到一個實現自IHttpHandler的類,然後只需在ProcessRequest方法中寫上處理邏輯就行了。但是這樣的一個請求處理程式(下稱ashx)是同步的,就是接待該次請求的線程會一直等待處理完才能解脫,後果就是,如果 ...
  • 小程式頁面代碼因為某些人力不可控的原因代碼丟失了,這裡簡單說明一下 調用小程式APIwx.chooseImage(OBJECT)選擇相冊或拍攝照片,會返回 tempFilePaths,之後通過wx.uploadFile(OBJECT)把照片傳至後臺,在伺服器後臺進行Base64編碼, 小程式目前不支 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...