C#實現匯入匯出Excel資料的兩種方法詳解
本文為大家分享了C#匯入匯出Excel資料的具體程式碼,供大家參考,具體內容如下
注:對於實體類物件最好新建一個並且繼承原有實體類,這樣可以將型別進行修改;
方法一:此種方法是用EPPLUS中的FileInfo流進行讀取的(是不是流我還真不太瞭解,若有懂得請留言,非常感謝了)
1234567891011121314151617181920212223242526272829 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Abp.Extensions; namespace HYZT.Ltxy.International.Ctrip.Exporting { public class ExcelLib { public ICtripPolicyExcelImport GetExcel( string filePath) { if (filePath.Trim() .IsNullOrEmpty()) throw new Exception( "檔名不能為空" ); //因為這兒用得是EPPLUS對Excel進行的操作,所以只能操作 //2007以後的版本以後的(即副檔名為.xlsx) if (!filePath.Trim().EndsWith( "xlsx" )) throw new Exception( "請使用office Excel 2007版本或2010版本" ); else if (filePath.Trim().EndsWith( "xlsx" )) { ICtripPolicyExcelImport res = new CtripPolicyExcelImport(filePath.Trim()); return res; } else return null ; } } } |
方法介面:
123456789101112131415161718192021222324252627282930313233343536 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HYZT.Ltxy.International.Ctrip.Exporting { public interface ICtripPolicyExcelImport { /// <summary> 開啟檔案 </summary> bool Open(); //ExcelVersion Version { get; } /// <summary> 檔案路徑 </summary> string FilePath { get ; set ; } /// <summary> 檔案是否已經開啟 </summary> bool IfOpen { get ; } /// <summary> 檔案包含工作表的數量 </summary> int SheetCount { get ; } /// <summary> 當前工作表序號 </summary> int CurrentSheetIndex { get ; set ; } /// <summary> 獲取當前工作表中行數 </summary> int GetRowCount(); /// <summary> 獲取當前工作表中列數 </summary> int GetColumnCount(); /// <summary> 獲取當前工作表中某一行中單元格的數量 </summary> /// <param name="Row">行序號</param> int GetCellCountInRow( int Row); /// <summary> 獲取當前工作表中某一單元格的值(按字串返回) </summary> /// <param name="Row">行序號</param> /// <param name="Col">列序號</param> string GetCellValue( int Row, int Col); /// <summary> 關閉檔案 </summary> void Close(); } } |
方法實現:
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | using OfficeOpenXml; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HYZT.Ltxy.International.Ctrip.Exporting { public class CtripPolicyExcelImport:ICtripPolicyExcelImport { public CtripPolicyExcelImport() { } public CtripPolicyExcelImport( string path) { filePath = path; } private string filePath = "" ; private ExcelWorkbook book = null ; private int sheetCount = 0; private bool ifOpen = false ; private int currentSheetIndex = 0; private ExcelWorksheet currentSheet = null ; private ExcelPackage ep = null ; public bool Open() { try { ep = new ExcelPackage( new FileInfo(filePath)); if (ep == null ) return false ; book =ep.Workbook; sheetCount = book.Worksheets.Count; currentSheetIndex = 0; currentSheet = book.Worksheets[1]; ifOpen = true ; } catch (Exception ex) { throw new Exception(ex.Message); } return true ; } public void Close() { if (!ifOpen || ep == null ) return ; ep.Dispose(); } //public ExcelVersion Version //{ get { return ExcelVersion.Excel07; } } public string FilePath { get { return filePath; } set { filePath = value; } } public bool IfOpen { get { return ifOpen; } } public int SheetCount { get { return sheetCount; } } public int CurrentSheetIndex { get { return currentSheetIndex; } set { if (value != currentSheetIndex) { if (value >= sheetCount) throw new Exception( "工作表序號超出範圍" ); currentSheetIndex = value; currentSheet =book.Worksheets[currentSheetIndex+1]; } } } public int GetRowCount() { if (currentSheet == null ) return 0; return currentSheet.Dimension.End.Row; } public int GetColumnCount() { if (currentSheet == null ) return 0; return currentSheet.Dimension.End.Column; } public int GetCellCountInRow( int Row) { if (currentSheet == null ) return 0; if (Row >= currentSheet.Dimension.End.Row) return 0; return currentSheet.Dimension.End.Column; } //根據行號和列號獲取指定單元格的資料 public string GetCellValue( int Row, int Col) { if (currentSheet == null ) return "" ; if (Row >= currentSheet.Dimension.End.Row || Col >= currentSheet.Dimension.End.Column) return "" ; object tmpO =currentSheet.GetValue(Row+1, Col+1); if (tmpO == null ) return "" ; return tmpO.ToString(); } } } |
方法呼叫實現功能:
1234567891011 | //用於程式是在本地,所以此時的路徑是本地電腦的絕對路勁; //當程式釋出後此路徑應該是伺服器上的絕對路徑,所以在此之前還要有 //一項功能是將本地檔案上傳到伺服器上的指定位置,此時在獲取路徑即可 public string GetExcelToCtripPolicy( string filePath) { ExcelLib lib = new ExcelLib(); if (filePath == null ) return new ReturnResult< bool >( false , "未找到相應檔案" ); string str= tmp.GetCellValue(i, j); return str; } |
方法二:將Excel表格轉化成DataTable表,然後在對DataTable進行業務操作
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | using Abp.Application.Services; using OfficeOpenXml; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace HYZT.Ltxy.International.Ctrip.GetExcelToDataTable { public class EPPlusHelperAppService:ApplicationService,IEPPlusHelperAppService { private static string GetString( object obj) { try { return obj.ToString(); } catch (Exception ex) { return "" ; } } /// <summary> ///將指定的Excel的檔案轉換成DataTable (Excel的第一個sheet) /// </summary> /// <param name="fullFielPath">檔案的絕對路徑</param> /// <returns></returns> public DataTable WorksheetToTable( string filePath) { try { FileInfo existingFile = new FileInfo(filePath); ExcelPackage package = new ExcelPackage(existingFile); ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; //選定 指定頁 return WorksheetToTable(worksheet); } catch (Exception) { throw ; } } /// <summary> /// 將worksheet轉成datatable /// </summary> /// <param name="worksheet">待處理的worksheet</param> /// <returns>返回處理後的datatable</returns> public static DataTable WorksheetToTable(ExcelWorksheet worksheet) { //獲取worksheet的行數 int rows = worksheet.Dimension.End.Row; //獲取worksheet的列數 int cols = worksheet.Dimension.End.Column; DataTable dt = new DataTable(worksheet.Name); DataRow dr = null ; for ( int i = 1; i <= rows; i++) { if (i > 1) dr = dt.Rows.Add(); for ( int j = 1; j <= cols; j++) { //預設將第一行設定為datatable的標題 if (i == 1) dt.Columns.Add(GetString(worksheet.Cells[i, j].Value)); //剩下的寫入datatable else dr[j - 1] = GetString(worksheet.Cells[i, j].Value); } } return dt; } } } |
之前我有一個程式用的是方法一進行Excel匯入的,速度不是很快,後來我又用了第二種方法但是速度更慢了,到底這兩種方法哪種快,請指導,還是我用第二種方法的時候業務判斷有問題,不得而知,就請明白人指導我到底這兩種方法哪種比較好些。
相關推薦
C#實現匯入匯出Excel資料的兩種方法詳解
這篇文章主要為大家詳細介紹了C#匯入匯出Excel資料的兩種方法,具有一定的參考價值,感興趣的小夥伴們可以參考一下本文為大家分享了C#匯入匯出Excel資料的具體程式碼,供大家參考,具體內容如下注:對於實體類物件最好新建一個並且繼承原有實體類,這樣可以將型別進行修改;方法一:
Java構造和解析Json資料的兩種方法詳解二
package com.json; import java.lang.reflect.Method; import java.text.ParseException; import java.util.HashMap; import java.util.Iterator; import java.uti
PHP實現鏈式操作的三種方法詳解
ret 思想 ont 過濾字符 一個 詳解 rgs 通過 span 這篇文章主要介紹了PHP實現鏈式操作的三種方法,結合實例形式分析了php鏈式操作的相關實現技巧與使用註意事項,需要的朋友可以參考下 本文實例講述了PHP實現鏈式操作的三種方法。分享給大家供大家參考,具
sqlalchemy的兩種方法詳解
工作需要,用到了sqlalchemy, 經過近一個月的不斷學習和探索實踐,現在整理一下,以免將來沒地方找。 sqlalchemy有兩種方法,一種是session-mapper的方式,稱為orm方式,另一種就是原生的select等sql語句,稱之為core方式。 下面的講解我
詳講:C#快速匯出多個sheet到excel的兩種方法(Cell和Range方法), 解決了(匯入時外部表不是預期的格式)
C# 匯出的表載入時報錯:外部表不是預期的格式。的解決方案 在網絡卡找了一些Excel匯出的方法,大部分能匯出,但時不能將匯出的Excel匯入。總是報:外部表不是預期的格式 找了好久終於找到了解決方案。 這是本人整理修改後的的可以實現匯出匯入的方法。供大家學習參考,方法就是用一個沒問題的
C#將Excel資料表匯入SQL資料庫的兩種方法
方法一: 實現在c#中可高效的將excel資料匯入到sqlserver資料庫中,很多人通過迴圈來拼接sql,這樣做不但容易出錯而且效率低下,最好的辦法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 類來實現。 using Sys
JqGrid分頁表格資料匯出excel而兩種方式
首先要確定一個問題: 你的資料返回的方式是一次性載入完還是點選下一頁重新請求伺服器? 根據你上邊資料返回的方式,我們分類來處理。 第一種:點選下一頁重新請求伺服器 這種的話,每次點選下一頁是需要重新請求伺服器的,所以我們只需傳送請求,然後後臺從資料庫sele
C#讀取Excel資料兩種方式效能對比
方式一:程式讀取Excel資料,程式碼如下: Excel.Application m_ExcelFile = new Excel.Application(); Excel._Workbook m_Workbook;
C#datagtidview1匯出到excel的兩種方法可以直接用
C# DataGridView匯出Excel的兩種經典方法 2016年04月07日 10:10:55 貝爺_野外求生 閱讀數:4362更多 個人分類: C# 第一種是用資料流匯出: #region SaveFileDialog saveF
C語言經典演算法(七)——遞迴實現階乘演算法的兩種方法
今後繼續整理演算法並寫出自己的理解和備註。 C++實現的:遞迴實現階乘演算法N! 1、 遞迴實現n! <1> 題目描述:輸入n值,求解n的階乘 <2> 方法一:累乘法 <3> 方法二:遞迴法 原始碼: 一、 遞迴實現n! 1、 累乘法 #
使用C++11實現執行緒池的兩種方法
概述:什麼是執行緒池? 因為程式邊執行邊建立執行緒是比較耗時的,所以我們通過池化的思想:在程式開始執行前建立多個執行緒,這樣,程式在執行時,只需要從執行緒池中拿來用就可以了.大大提高了程式執行效率. 如何實現: 一般執行緒池都會有以下幾個部分構成: 1. 執行
JeeSite中實現匯入匯出Excel步驟
閒話 少說 直接 上 程式碼 springMVC專案 JSP頁面程式碼如下 </shiro:hasPermission> <shiro:hasPermission name="echarts:memPutInto:import">
Java利用POI實現匯入匯出Excel表格示例程式碼
介紹Jakarta POI 是一套用於訪問微軟格式文件的Java API。Jakarta POI有很多元件組成,其中有用於操作Excel格式檔案的HSSF和用於操作Word的HWPF,在各種元件中目前只有用於操作Excel的HSSF相對成熟。官方主頁http://poi.ap
.Net MVC 匯入匯出Excel總結(三種匯出Excel方法,一種匯入Excel方法)
public class ExcelController : Controller { // // GET: /Excel/ Models.zbwxglEntities myMdl = new Models.zbwxglEntities();
Excel 2013匯出圖表的兩種方法
使用Excel時,經常需要將繪製的圖形匯出成PDF或者PNG等圖片格式。最簡單的一個方法就是使用截圖工具,將需要匯出的圖進行截圖,然後另存為所需格式。該方法效率較高,但是效果不夠美觀。本文推薦兩種方法
C#實現發送郵件的三種方法
thumbnail catch plugins () listbox 幫助 哈希 .text sbo 本文實例講述了C#實現發送郵件的三種方法。分享給大家供大家參考。具體方法分析如下: 一、問題: 最近公司由於一個R&I;項目的需要,用戶要求在購買產品或出貨等
Java實現生產者消費者模式的兩種方法
1、 利用 Object的 wait/notify,和非阻塞佇列實現 import java.util.PriorityQueue; public class Test{ private int size=10; private PriorityQueue&
兩種方法實現Python二分查詢演算法 兩種方法實現Python二分查詢演算法
兩種方法實現Python二分查詢演算法 一. ? 1 2
C#讀寫txt檔案的兩種方法介紹
1.新增名稱空間 System.IO; System.Text; 2.檔案的讀取 (1).使用FileStream類進行檔案的讀取,並將它轉換成char陣列,然後輸出。 byte[] byData = new byte[100]; c
實現List集合排序的兩種方法(使用Collections.sort方法)
1:實現comparable package core.java.collection.collections; public class User implements Comparable<User>{ private i