C# 讀取EXCEL文件的三種經典方法

using System;

using System.Data;using System.Configuration;

using System.Web;

using Microsoft.Office.Interop;

using Microsoft.Office.Core;

namespace Microsoft.Office.Interop.ExcelEdit{? ??

////// Microsoft.Office.Interop.ExcelEdit 的摘要說明

public class ExcelEdit? ?

?{? ??

? ? public string mFilename; ? ?

?? ?public Microsoft.Office.Interop.Excel.Application app;? ? ?

?? public Microsoft.Office.Interop.Excel.Workbooks wbs;? ??

? ? public Microsoft.Office.Interop.Excel.Workbook wb;? ??

? ? public Microsoft.Office.Interop.Excel.Worksheets wss;? ? ?

?? public Microsoft.Office.Interop.Excel.Worksheet ws;? ? ?

?? public ExcelEdit()? ? ? ??

{? ? ? ? ? ? //? ? ? ? ? ? // TODO: 在此處添加構造函數邏輯? ? ? ? ? ? //? ? ? ? }? ??

? ? public void Create()//創建一個Microsoft.Office.Interop.Excel對象? ??

? ? {? ? ? ? ? ??

? ? ?app = new Microsoft.Office.Interop.Excel.Application();? ? ??

? ? ? wbs = app.Workbooks;? ? ? ?

?? ? wb = wbs.Add(true);? ? ?

?? }? ? ??

? public void Open(string FileName)//打開一個Microsoft.Office.Interop.Excel文件? ? ? ?

?{? ? ? ? ? ??

app = new Microsoft.Office.Interop.Excel.Application();? ? ? ? ? ?

?wbs = app.Workbooks;? ? ? ? ? ??

wb = wbs.Add(FileName);? ? ? ? ? ??

//wb = wbs.Open(FileName, 0, true, 5,"", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true,Type.Missing,Type.Missing);? ? ? ? ? ?

?//wb = wbs.Open(FileName,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing,Type.Missing);? ? ? ? ? ??

mFilename = FileName;? ? ? ?

?}? ? ? ??

public Microsoft.Office.Interop.Excel.Worksheet GetSheet(string SheetName)? ? ? ? //獲取一個工作表? ? ??

? {? ? ? ? ? ??

Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[SheetName];? ? ? ? ? ?

?return s;? ??

? ? }? ? ?

?? public Microsoft.Office.Interop.Excel.Worksheet AddSheet(string SheetName)? ? ? ? //添加一個工作表? ? ? ??

{? ? ? ? ??

? Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);? ? ? ? ? ?

?s.Name = SheetName;? ? ? ? ? ??

return s;? ? ? ?

?}? ? ? ?

?public void DelSheet(string SheetName)//刪除一個工作表? ? ??

? {? ? ? ??

? ? ((Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[SheetName]).Delete();??

? ? ? }? ? ? ??

public Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(string OldSheetName, string NewSheetName)//重命名一個工作表一? ? ?

?? {? ? ? ? ? ??

Microsoft.Office.Interop.Excel.Worksheet s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[OldSheetName];? ? ? ??

? ? s.Name = NewSheetName;? ? ? ? ?

?? return s;? ? ? ?

?}? ? ? ??

public Microsoft.Office.Interop.Excel.Worksheet ReNameSheet(Microsoft.Office.Interop.Excel.Worksheet Sheet, string NewSheetName)//重命名一個工作表二? ? ? ?

?{? ? ? ? ? ??

Sheet.Name = NewSheetName;? ? ? ? ? ??

return Sheet;? ? ? ??

}? ? ? ?

?public void SetCellValue(Microsoft.Office.Interop.Excel.Worksheet ws, int x, int y, object value)? ? ? ? //ws:要設值的工作表? ? X行Y列? ? value? 值? ? ? ?

?{? ? ? ? ? ?

?ws.Cells[x, y] = value;? ? ?

?? }? ? ? ??

public void SetCellValue(string ws, int x, int y, object value)? ? ? ? //ws:要設值的工作表的名稱 X行Y列 value 值? ? ??

? {? ? ? ? ? ??

GetSheet(ws).Cells[x, y] = value;? ? ??

? }? ? ? ??

public void SetCellProperty(Microsoft.Office.Interop.Excel.Worksheet ws, int Startx, int Starty, int Endx, int Endy, int size, string name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)? ? ? ? //設置一個單元格的屬性? 字體,? 大小,顏色? ,對齊方式? ? ??

? {? ? ? ? ? ??

name = "宋體";? ? ? ? ? ?

?size = 12;? ? ? ? ? ??

color = Microsoft.Office.Interop.Excel.Constants.xlAutomatic;? ? ? ? ? ?

?HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlRight;? ??

?ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;? ? ? ??

}? ? ? ?

?public void SetCellProperty(string wsn, int Startx, int Starty, int Endx, int Endy, int size, string name, Microsoft.Office.Interop.Excel.Constants color, Microsoft.Office.Interop.Excel.Constants HorizontalAlignment)? ? ? ??

{? ? ? ? ? ?

?//name = "宋體";? ? ? ? ? ?

?//size = 12;? ? ? ? ? ?

?//color = Microsoft.Office.Interop.Excel.Constants.xlAutomatic;? ? ? ? ??

? //HorizontalAlignment = Microsoft.Office.Interop.Excel.Constants.xlRight;? ? ? ? ? ? Microsoft.Office.Interop.Excel.Worksheet ws = GetSheet(wsn);? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name = name;? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size = size;? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color = color;? ? ? ? ? ? ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;? ? ? ?

?}? ? ??

? public void UniteCells(Microsoft.Office.Interop.Excel.Worksheet ws, int x1, int y1, int x2, int y2)? ? ? ? //合并單元格? ? ?

?? {? ? ? ? ? ??

ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Type.Missing);? ??

? ? }? ? ? ??

public void UniteCells(string ws, int x1, int y1, int x2, int y2)? ? ? ? //合并單元格? ? ? ?

?{? ? ? ? ? ??

GetSheet(ws).get_Range(GetSheet(ws).Cells[x1, y1], GetSheet(ws).Cells[x2, y2]).Merge(Type.Missing);? ?

?? ? }? ? ? ?

?public void InsertTable(System.Data.DataTable dt, string ws, int startX, int startY)//將內存中數據表格插入到Microsoft.Office.Interop.Excel指定工作表的指定位置 為在使用模板時控制格式時使用一? ? ? ?

?{? ? ? ? ? ??

for (int i = 0; i? <= dt.Rows.Count - 1; i++) ? ? ??

? ? {? ? ? ? ? ? ?

?? for (int j = 0; j? <= dt.Columns.Count - 1; j++)? ? ? ??

? ? ? ? {? ? ? ? ? ? ? ? ? ??

GetSheet(ws).Cells[startX+i, j + startY] = dt.Rows[i][j].ToString();? ? ??

? ? ? ? ? }? ? ? ??

? ? }? ? ??

? }? ? ? ?

?public void InsertTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, int startX, int startY)//將內存中數據表格插入到Microsoft.Office.Interop.Excel指定工作表的指定位置二? ? ? ?

?{? ? ? ? ? ?

?for (int i = 0; i? <= dt.Rows.Count - 1; i++)? ? ??

? ? ? {? ? ? ? ? ? ? ??

for (int j = 0; j? <= dt.Columns.Count - 1; j++)? ? ? ? ??

? ? ? {? ? ? ? ? ? ? ? ? ?

?ws.Cells[startX+i, j + startY] = dt.Rows[i][j];? ? ? ? ? ? ?

?? }? ? ? ? ? ?

?}? ? ??

? }? ? ? ??

public void AddTable(System.Data.DataTable dt, string ws, int startX, int startY)//將內存中數據表格添加到Microsoft.Office.Interop.Excel指定工作表的指定位置一? ? ? ?

?{? ? ? ? ? ?

?for (int i = 0; i? <= dt.Rows.Count - 1; i++)? ? ??

? ? ? { ? ? ? ? ? ? ??

for (int j = 0; j? <= dt.Columns.Count - 1; j++)? ? ? ? ?

?? ? ? {? ? ? ? ? ? ? ? ? ?

?GetSheet(ws).Cells[i + startX, j + startY] = dt.Rows[i][j];? ? ? ? ? ?

?? ? }? ? ? ? ?

?? }? ? ? ?

?}? ? ? ??

public void AddTable(System.Data.DataTable dt, Microsoft.Office.Interop.Excel.Worksheet ws, int startX, int startY)//將內存中數據表格添加到Microsoft.Office.Interop.Excel指定工作表的指定位置二? ? ??

? {? ? ? ? ??

? for (int i = 0; i? <= dt.Rows.Count - 1; i++)? ? ? ? ?

?? {? ? ? ? ? ? ??

? for (int j = 0; j? <= dt.Columns.Count - 1; j++)? ? ? ? ? ? ?

?? {? ? ? ? ? ? ? ? ? ??

ws.Cells[i + startX, j + startY] = dt.Rows[i][j];? ? ? ? ? ??

? ? }? ? ? ? ??

? }? ? ? ?

?}? ? ??

? public void InsertPictures(string Filename, string ws)? ? ? ? //插入圖片操作一? ? ??

? {? ? ? ? ? ?

?GetSheet(ws).Shapes.AddPicture(Filename, MsoTriState.msoFalse, MsoTriState.msoTrue, 10, 10, 150, 150);? ? ? ? ? ? //后面的數字表示位置? ? ??

? }? ? ??

? //public void InsertPictures(string Filename, string ws, int Height, int Width)? ? ? ? //插入圖片操作二? ? ? ??

//{? ? ??

? //? ? GetSheet(ws).Shapes.AddPicture(Filename, MsoTriState.msoFalse, MsoTriState.msoTrue, 10, 10, 150, 150);? ? ??

? //? ? GetSheet(ws).Shapes.get_Range(Type.Missing).Height = Height;? ? ??

? //? ? GetSheet(ws).Shapes.get_Range(Type.Missing).Width = Width;? ? ? ??

//}? ? ? ?

?//public void InsertPictures(string Filename, string ws, int left, int top, int Height, int Width)? ? ? ? //插入圖片操作三? ? ? ??

//{? ? ? ?

?//? ? GetSheet(ws).Shapes.AddPicture(Filename, MsoTriState.msoFalse, MsoTriState.msoTrue, 10, 10, 150, 150);? ? ? ?

?//? ? GetSheet(ws).Shapes.get_Range(Type.Missing).IncrementLeft(left);? ? ? ?

?//? ? GetSheet(ws).Shapes.get_Range(Type.Missing).IncrementTop(top);? ? ?

?? //? ? GetSheet(ws).Shapes.get_Range(Type.Missing).Height = Height;? ? ? ??

//? ? GetSheet(ws).Shapes.get_Range(Type.Missing).Width = Width;? ? ? ??

//}? ? ? ??

public void InsertActiveChart(Microsoft.Office.Interop.Excel.XlChartType ChartType, string ws, int DataSourcesX1, int DataSourcesY1, int DataSourcesX2, int DataSourcesY2, Microsoft.Office.Interop.Excel.XlRowCol ChartDataType)? ? ? ?

?//插入圖表操作? ? ? ?

?{? ? ? ? ? ??

ChartDataType = Microsoft.Office.Interop.Excel.XlRowCol.xlColumns;? ? ? ? ? ? wb.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);? ? ? ??

? ? {? ? ? ? ? ? ? ??

wb.ActiveChart.ChartType = ChartType;? ?

?? ? ? ? ? ? wb.ActiveChart.SetSourceData(GetSheet(ws).get_Range(GetSheet(ws).Cells[DataSourcesX1, DataSourcesY1], GetSheet(ws).Cells[DataSourcesX2, DataSourcesY2]), ChartDataType);? ? ?

?? ? ? ? ? wb.ActiveChart.Location(Microsoft.Office.Interop.Excel.XlChartLocation.xlLocationAsObject, ws);? ? ? ? ??

? }? ? ??

? }? ? ?

?? public bool Save()? ? ? ? //保存文檔? ?

?? ? {? ? ? ? ? ?

?if (mFilename == "")? ? ? ? ??

? {? ? ? ? ? ? ? ?

?return false;? ? ? ? ? ?

?}? ? ? ? ? ?

?else? ? ? ? ?

?? {? ? ? ? ? ? ?

?? try? ? ? ? ? ??

? ? {? ? ? ? ? ? ? ? ? ??

wb.Save();? ? ? ? ? ? ? ? ?

?? return true;? ? ? ? ? ? ?

?? }? ? ? ? ? ? ? ?

?catch (Exception ex)? ? ? ? ? ?

?? ? {? ? ? ? ? ? ? ? ? ??

return false;? ? ? ? ? ? ?

?? }? ? ? ? ? ?

?}? ? ? ??

}? ? ? ?

?public bool SaveAs(object FileName)? ? ? ? //文檔另存為? ? ? ?

?{? ? ? ? ? ??

try? ? ? ? ?

?? {? ? ? ? ? ? ??

? wb.SaveAs(FileName, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);? ? ?

?? ? ? ? ? return true;? ? ? ? ??

? }? ? ? ? ? ??

catch (Exception ex) ? ? ? ? ?

?{? ? ? ? ? ? ? ??

return false;? ? ??

? ? ? }? ? ?

?? }? ? ??

? public void Close()? ? ? ? //關閉一個Microsoft.Office.Interop.Excel對象,銷毀對象? ? ??

? {? ? ? ? ??

? //wb.Save();? ? ? ? ??

? wb.Close(Type.Missing, Type.Missing, Type.Missing);? ? ? ? ? ?

?wbs.Close();? ? ? ? ? ?

?app.Quit();? ? ? ? ??

? wb = null;? ? ? ? ? ??

wbs = null;? ? ? ? ? ??

app = null;? ? ? ? ? ??

GC.Collect();? ? ? ?

?}? ??

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評論 6 546
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,814評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,980評論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,779評論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,109評論 1 330
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,287評論 0 291
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,799評論 1 338
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,515評論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,750評論 1 375
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,933評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評論 1 296
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,492評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,703評論 2 380

推薦閱讀更多精彩內容

  • C#操作excel(多種方法比較) 我們在做excel資料的時候,通常有以下方法。 一.導入導出excel常用方法...
    北風知我意閱讀 1,502評論 0 2
  • 原文來自:http://www.cnblogs.com/zhangqifeng/archive/2009/06/1...
    簡單Liml閱讀 1,193評論 0 0
  • 1.1 VBA是什么 直到90年代早期,使應用程序自動化還是充滿挑戰性的領域.對每個需要自動化的應用程序,人們不得...
    浮浮塵塵閱讀 21,825評論 6 49
  • 本例為設置密碼窗口 (1) If Application.InputBox(“請輸入密碼:”) = 1234 Th...
    浮浮塵塵閱讀 13,725評論 1 20
  • 個人簡介 王士生,字涵石,1947年出生于西安,天津市武清區籍貫。 現為:國家一級美術師,中國華夏...
    藝術范閱讀 2,467評論 0 0