net以execl做數據庫_[原創]Net實現Excel導入導出到數據庫(附源碼)

關于數據庫導出到Excel和SQLServer數據導出到Excel的例子,在博客園有很多的例子,自己根據網上搜集資料,自己做了亦歌簡單的demo,現在分享出來供初學者學習交流使用。

一、數據庫導入導出到Excel,比較流行的有兩種方式:采用傳統的office類庫和采用NPOI方式。

1、傳統的office類庫 使用的時候,本地需要安裝office才可以正常使用,而且導出速度相對比較慢。有點:支持office 2003 、office2007等。

2、采用NPOI方式 本地不需要安裝office,而且導出速度比傳統的方式快的多,兩種格式一個是HSSF支持(適用2007以前的版本),另一個是XSSF(XSSF適用2007版本及其以上的)。

二、簡單代碼介紹:

1、DataTable導出到Excel的MemoryStream

1 public static MemoryStream DataGridViewToExcel(DataGridView myDgv, stringstrHeaderText)2 {3 HSSFWorkbook workbook = newHSSFWorkbook();4 HSSFSheet sheet =(HSSFSheet)workbook.CreateSheet();5

6 #region 右擊文件 屬性信息

7 {8 DocumentSummaryInformation dsi =PropertySetFactory.CreateDocumentSummaryInformation();9 dsi.Company = "NPOI";10 workbook.DocumentSummaryInformation =dsi;11

12 SummaryInformation si =PropertySetFactory.CreateSummaryInformation();13 si.Author = "文件作者信息"; //填加xls文件作者信息

14 si.ApplicationName = "創建程序信息"; //填加xls文件創建程序信息

15 si.LastAuthor = "最后保存者信息"; //填加xls文件最后保存者信息

16 si.Comments = "作者信息"; //填加xls文件作者信息

17 si.Title = "標題信息"; //填加xls文件標題信息

18 si.Subject = "主題信息";//填加文件主題信息

19 si.CreateDateTime =System.DateTime.Now;20 workbook.SummaryInformation =si;21 }22 #endregion

23

24 HSSFCellStyle dateStyle =(HSSFCellStyle)workbook.CreateCellStyle();25 HSSFDataFormat format =(HSSFDataFormat)workbook.CreateDataFormat();26 dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");27

28 //取得列寬

29 int[] arrColWidth = new int[myDgv.Columns.Count];30 foreach (DataGridViewColumn item inmyDgv.Columns)31 {32 arrColWidth[item.Index] = Encoding.GetEncoding(936).GetBytes(item.HeaderText.ToString()).Length;33 }34 //可以在循環里面自己設置列寬

35 for (int i = 0; i < myDgv.Rows.Count; i++)36 {37 for (int j = 0; j < myDgv.Columns.Count; j++)38 {39 int intTemp = Encoding.GetEncoding(936).GetBytes(myDgv.Rows[i].Cells[j].ToString()).Length;40 if (intTemp >arrColWidth[j])41 {42 arrColWidth[j] = intTemp/5;43 }44 }45 }46 int rowIndex = 0;47 foreach (DataGridViewRow row inmyDgv.Rows)48 {49 #region 新建表,填充表頭,填充列頭,樣式

50 if (rowIndex == 65535 || rowIndex == 0)51 {52 if (rowIndex != 0)53 {54 sheet =(HSSFSheet)workbook.CreateSheet();55 }56

57 #region 表頭及樣式

58 {59 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(0);60 headerRow.HeightInPoints = 25;61 headerRow.CreateCell(0).SetCellValue(strHeaderText);62

63 HSSFCellStyle headStyle =(HSSFCellStyle)workbook.CreateCellStyle();64 //headStyle.Alignment = CellHorizontalAlignment.CENTER;

65 HSSFFont font =(HSSFFont)workbook.CreateFont();66 font.FontHeightInPoints = 20;67 font.Boldweight = 700;68 headStyle.SetFont(font);69 headerRow.GetCell(0).CellStyle =headStyle;70 //sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1));71 //headerRow.Dispose();

72 }73 #endregion

74

75

76 #region 列頭及樣式

77 {78 HSSFRow headerRow = (HSSFRow)sheet.CreateRow(1);79 HSSFCellStyle headStyle =(HSSFCellStyle)workbook.CreateCellStyle();80 //headStyle.Alignment = CellHorizontalAlignment.CENTER;

81 HSSFFont font =(HSSFFont)workbook.CreateFont();82 font.FontHeightInPoints = 10;83 font.Boldweight = 700;84 headStyle.SetFont(font);85 foreach (DataGridViewColumn column inmyDgv.Columns)86 {87 headerRow.CreateCell(column.Index).SetCellValue(column.HeaderText);88 headerRow.GetCell(column.Index).CellStyle =headStyle;89

90 //設置列寬

91 sheet.SetColumnWidth(column.Index, (arrColWidth[column.Index] + 1) * 256);92 }93 //headerRow.Dispose();

94 }95 #endregion

96

97 rowIndex = 2;98 }99 #endregion

100

101

102 #region 填充內容

103 HSSFRow dataRow =(HSSFRow)sheet.CreateRow(rowIndex);104 if (row.Index > 0)105 {106 foreach (DataGridViewColumn column inmyDgv.Columns)107 {108 HSSFCell newCell =(HSSFCell)dataRow.CreateCell(column.Index);109

110 string drValue = myDgv[column.Index, row.Index-1].Value.ToString();111

112 switch(column.ValueType.ToString())113 {114 case "System.String"://字符串類型

115 newCell.SetCellValue(drValue);116 break;117 case "System.DateTime"://日期類型

118 System.DateTime dateV;119 System.DateTime.TryParse(drValue, outdateV);120 newCell.SetCellValue(dateV);121

122 newCell.CellStyle = dateStyle;//格式化顯示

123 break;124 case "System.Boolean"://布爾型

125 bool boolV = false;126 bool.TryParse(drValue, outboolV);127 newCell.SetCellValue(boolV);128 break;129 case "System.Int16"://整型

130 case "System.Int32":131 case "System.Int64":132 case "System.Byte":133 int intV = 0;134 int.TryParse(drValue, outintV);135 newCell.SetCellValue(intV);136 break;137 case "System.Decimal"://浮點型

138 case "System.Double":139 double doubV = 0;140 double.TryParse(drValue, outdoubV);141 newCell.SetCellValue(doubV);142 break;143 case "System.DBNull"://空值處理

144 newCell.SetCellValue("");145 break;146 default:147 newCell.SetCellValue("");148 break;149 }150

151 }152 }153 else

154 { rowIndex--; }155 #endregion

156

157 rowIndex++;158 }159 using (MemoryStream ms = newMemoryStream())160 {161 workbook.Write(ms);162 ms.Flush();163 ms.Position = 0;164

165 sheet.Dispose();166 //workbook.Dispose();//一般只用寫這一個就OK了,他會遍歷并釋放所有資源,但當前版本有問題所以只釋放sheet

167 returnms;168 }169 }

2、讀取excel到DataTable

/// 讀取excel///默認第一行為標頭///

/// excel文檔路徑

///

public static DataTable Import(stringstrFileName)

{

DataTable dt= newDataTable();

HSSFWorkbook hssfworkbook;using (FileStream file = newFileStream(strFileName, FileMode.Open, FileAccess.Read))

{

hssfworkbook= newHSSFWorkbook(file);

}

HSSFSheet sheet= (HSSFSheet)hssfworkbook.GetSheetAt(0);

System.Collections.IEnumerator rows=sheet.GetRowEnumerator();

HSSFRow headerRow= (HSSFRow)sheet.GetRow(0);int cellCount =headerRow.LastCellNum;//獲取表頭

for (int j = 0; j < cellCount; j++)

{

HSSFCell cell=(HSSFCell)headerRow.GetCell(j);

dt.Columns.Add(cell.ToString());

}for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)

{

HSSFRow row=(HSSFRow)sheet.GetRow(i);

DataRow dataRow=dt.NewRow();for (int j = row.FirstCellNum; j < cellCount; j++)

{if (row.GetCell(j) != null)

dataRow[j]=row.GetCell(j).ToString();

}

dt.Rows.Add(dataRow);

}returndt;

}

3、批量導入大批量數據的寫法(?SqlBulkCopy?)

private void btnImport_Click(object sender, EventArgs e)

{

string constr = System.Configuration.ConfigurationSettings.AppSettings["connstr"].ToString();

#region 選擇文件模塊

string path = "";

//初始化一個OpenFileDialog類

OpenFileDialog fileDialog = new OpenFileDialog();

//判斷用戶是否正確的選擇了文件

if (fileDialog.ShowDialog() == DialogResult.OK)

{

//獲取用戶選擇文件的后綴名

string extension = Path.GetExtension(fileDialog.FileName);

//聲明允許的后綴名

string[] str = new string[] { ".xls" };

if (!((IList)str).Contains(extension))

{

MessageBox.Show("僅能上傳xls格式的Excel文件!");

}

else

{

//獲取用戶選擇的文件,并判斷文件大小不能超過20K,fileInfo.Length是以字節為單位的

FileInfo fileInfo = new FileInfo(fileDialog.FileName);

if (fileInfo.Length > 204800000)

{

MessageBox.Show("上傳的Excel不能大于200M");

}

else

{

path = fileDialog.FileName;

//在這里就可以寫獲取到正確文件后的代碼了

}

}

}

#endregion

System.Diagnostics.Stopwatch timeWatch = System.Diagnostics.Stopwatch.StartNew();

DataTable dtnew = NPOIExcelHelper.Import(path);

DataTable ss = GetDt();

if (dt != null && dt.Rows.Count != 0)

{

int n = 2500;

//遍歷每一行執行插入操作

foreach (DataRow item in dtnew.Rows)

{

ss.Rows.Add(n,2, item["專業名稱"], item["專業代碼"], DateTime.Now, 0);

n++;

}

}

SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(constr, SqlBulkCopyOptions.UseInternalTransaction);

sqlbulkcopy.DestinationTableName = "COMM_ZZ_COURSE_CLASS";//數據庫中的表名

sqlbulkcopy.WriteToServer(ss);

timeWatch.Stop();

MessageBox.Show("數據導入成功耗時為:" + timeWatch.Elapsed + "");

}

說明:本人屬于新手寫文章,水平有限,如果發現文章有錯誤的地方,歡迎指出,多謝各位朋友,希望大家共同進步

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272969.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機基礎cpu知識,CPU基礎知識: DIY裝機小白必看的CPU知識掃盲

CPU也就是中央處理器&#xff0c;全拼為Central Processing Unit&#xff0c;在計算機中可以比喻成人的大腦。它是一塊超大規模的集成電路&#xff0c;是一臺計算機的運算核心和控制核心。它的功能主要是解釋計算機指令以及處理計算機軟件中的數據。下面華強電子網的小編分享一…

const 用法

static NSString * const testString "google"; //表示testString這個指針不能被修改&#xff0c;如若對testString賦值則會報錯&#xff1a;testString &#xff1d; "hello";編譯器會報錯 static NSString const *testString "google"; //表…

mvc html validator,ASP.NET MVC實現Validation驗證器擴展

今天介紹在ASP.NET MVC實現Validation驗證器擴展,通過使用Controller驗證并不是最好的方法&#xff1a;驗證過于分散&#xff0c;容易造成重復代碼&#xff0c;不利于維護與擴展,因此本節將使用MVC默認綁定器(DefaultModelBinder)中包含了驗證架構,并實現Validation驗證器擴展&…

git 幾種還原版本_Git恢復之前版本的兩種方法reset、revert(圖文詳解)

一、問題描述在利用github實現多人合作程序開發的過程中&#xff0c;我們有時會出現錯誤提交的情況&#xff0c;此時我們希望能撤銷提交操作&#xff0c;讓程序回到提交前的樣子&#xff0c;本文總結了兩種解決方法&#xff1a;回退(reset)、反做(revert)。二、背景知識git的版…

自定義列表視圖

通過繼承BaseAdapter寫一個子類&#xff0c;可以創建自定義列表視圖&#xff1a; public class MyListAdapter extends BaseAdapter { private LayoutInflater mInflater;//聲明一個LayoutInflater類變量 private Context mContext;//聲明一個Context類變量 priva…

計算機專業答辯模板,論文答辯模板-計算機專業.ppt

《論文答辯模板-計算機專業.ppt》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《論文答辯模板-計算機專業.ppt(9頁珍藏版)》請在裝配圖網上搜索。1、基于S2SH論壇系統的設計與實現,專業&#xff1a; 姓名&#xff1a; 學號&#xff1a; 指導教師&#xff1a;,(附)論文…

springmvc請求返回一個字符_SpringMVC系列之Web利器SpringMVC

課程簡介&#xff1a;課程目標&#xff1a;了解SpringMVC和Spring的關系&#xff0c;能夠使用SpringMVC框架開發自己的Web應用。整合Spring , SpringMVC , MyBatis搭建項目開發環境&#xff0c;理解三層架構和MVC模式適用人群&#xff1a;適合對Java基礎知識應用自如&#xff0…

一次完整較為滲透過程

步驟一&#xff1a; 利用阿D瀏覽器通過https&#xff1a;//s.bt.gg 注入關鍵字掃描發現注入點&#xff1a; http://www.rqyl.gov.cn/*****.php?ID153 用啊D跑不出賬號密碼 步驟二&#xff1a; 手工注入http://www.rqyl.gov.cn/*****.php?ID153 and 11 、and12出錯 猜字段ht…

html5 filereader讀取文件,H5的FileReader分布讀取文件應該如何使用以及其方法簡介...

這次給大家帶來H5的FileReader分布讀取文件應該如何使用以及其方法簡介&#xff0c;H5的FileReader分布讀取文件的使用以及其方法簡介的注意事項有哪些&#xff0c;下面就是實戰案例&#xff0c;一起來看一下。先介紹一下H5中FileReader的一些方法以及事件FileReader方法名稱 作…

mysql 查詢某一主鍵在那些表中中被設置為外鍵了

use information_schema; show tables; select * from KEY_COLUMN_USAGE where COLUMN_NAMEareaid; 轉載于:https://www.cnblogs.com/liaojie970/p/4799750.html

室內空氣流動原理圖_新風系統原理圖—新風系統原理介紹

如今我們在進行新家的裝修的時候&#xff0c;不少人為了家人的健康著想&#xff0c;都在選購家電的同時會選擇安裝一款新風系統。但是盡管如此&#xff0c;大家對新風系統原理其實并不了解&#xff0c;更不要提新風系統各部分的原理了&#xff0c;下面小編就結合新風系統原理圖…

計算機網絡線路爭用,計算機網絡系統集成復習要點

計算機網絡系統集成復習要點計算機網絡系統集成復習要點1.在信息領域&#xff0c;對于系統集成一般分為軟件集成、硬件集成和網絡系統集成。2.按網絡覆蓋范圍的大小&#xff0c;將計算機網絡分為局域網(LAN)、城域網(MAN)、廣域網(WAN)和互聯網。3. 計算機網絡拓撲結構是指一個…

mrsql查詢第二高的成績_mysql-查找用戶的最高分數和相關的詳細信息

我有一個表,用戶可以在其中存儲分數和有關該分數的其他信息(例如,分數注釋或花費的時間等).我想要一個mysql查詢,該查詢可找到每個用戶的個人最佳成績及其相關的注釋和時間等我嘗試使用的是這樣的&#xff1a;SELECT *,MAX(score)FROM table GROUP BY(用戶)這樣做的問題是,雖然…

centos 7 防火墻和端口配置

開啟redis端口&#xff0c;修改防火墻配置文件 vi /etc/sysconfig/iptables 加入端口配置 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 6379:7000 -j AC…

計算機網絡實驗11.6.1,6.111 2004春季課程:數位系統概論實驗(Introductory Digital Systems Laboratory, Spring 2004)...

摘要&#xff1a;Lectures and labs on digital logic, flipflops, PALs, counters, timing, synchronization, finite-state machines, and microprogrammed systems prepare students for the design and implementation of a final project of their choice: games, music, …

v380pro設備連接失敗_天貓精靈可以連接臺式電腦使用嗎?需要什么東西? 安裝操作是哪幾個步驟? 最好有圖片解說!...

使用語音將天貓精靈調到【藍牙配對】&#xff1b;打開電腦的藍牙適配界面&#xff0c;讓電腦找到天貓精靈&#xff0c;稍等片刻&#xff0c;點擊【使用遠程裝置的揚聲器聆聽來自此PC的音頻】后的連接&#xff1b;最后調整音量即可。以下是詳細介紹&#xff1a;1、對天貓精靈說【…

SWOT分析是神馬?

SWOT分析是思維的工具來理解事物的方式。人生在世&#xff0c;作為一個獨立的實體&#xff0c;不可避免地需要思考的問題。除非你是豬。豬比這更聰明。眠質量&#xff0c;都要完爆白領&#xff0c;藍領和金領們。SWOT分析分為四個象限。我們用一頭名豬——麥兜來打個例如就清楚…

hive 日誌怎麼查看_Hive各個日志里都存放了什么信息?

審計日志首先&#xff0c;對于審計日志來說&#xff0c;記錄了某個時間點某個用戶從哪個IP發起對HiveServer或者MetaStore的請求以及記錄執行的語句是什么。如下的HiveServer審計日志&#xff0c;表示在2016-02-01 14:51:22 用戶user_chen向HiveServer發起了show tables請求&am…

語音媒體和信令的測試軟件,IP多媒體子系統信令分析工具的設計與實現

摘要&#xff1a;IP多媒體子系統(InternetProtocolMultimediaSubsystem,IMS)為基于IP的移動和固定通信融合提供了基礎,并被業界認為是網絡演進的一個重要階段.與此同時,信令分析工具一直被電信運營商,設備供應商,測試儀器廠商廣泛而深入的關注.一款優秀的信令分析工具,可以使設…

大小寫轉換

1 ;小寫字母的ASCII碼比大寫字母的ASCII碼的值大20H。2 ;比如大寫字母A的ASCII值為01000001 小寫字母a的ASCII碼為&#xff1a;011000013 ;公式為 a(01100001) - 20H(100000) A(01000001)4 ;A(01000001) 20H(100000) a(01100001)5 assume cs:codesg,ds:datasg6 7 datasg seg…