C#操作excel(多种方法比较)

更新时间:2023-12-03 15:06:02 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

C#操作excel(多种方法比较)

我们在做excel资料的时候,通常有以下方法。 一.导入导出excel常用方法:

1.用查询表的方式查询并show在数据集控件上。

代码

public static string strCon = \EDB.4.0 ; Data Source =C:\\\\08.xls;Extended Properties=Excel 8.0\;

public static DataSet ds;

protected void Page_Load(object sender, EventArgs e) {

OleDbConnection conn = new OleDbConnection(strCon); string sql = \; conn.Open();

OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);

ds = new DataSet();

myCommand.Fill(ds, \); conn.Close();

datagrid1.DataMember = \; datagrid1.DataSource = ds; datagrid1.DataBind();

//Excel.Application excel = new Excel.Application(); //excel.Application.Workbooks.Add(true); //excel.Visible = true; }

2.一个一个单元格的进行插入

代码

1 string str = @\RESS;Initial Catalog=TestBase;Integrated Security=True\; 2 SqlConnection conn = new SqlConnection(str); 3 conn.Open(); 4 int n = 0;

5 for (int i = 1; i < 20; i++) 6 {

7 if (n > 3) 8 break;

9 else

10 if (msheet.Cells.get_Range(\ + i, Type.Missing).Text.ToString() == \ && n <= 3) 11 { n++; } 12 else 13 {

14 //循环获取excel单元格的值一次一次的插入,excuteSql为执行的存储过程

15 excuteSql(msheet.Cells.get_Range(\ + i, Type.Missing).Text.ToString(),

16 msheet.Cells.get_Range(\ + (i + 1), Type.Missing).Text.ToString(),

17 msheet.Cells.get_Range(\ + (i + 2), Type.Missing).Text.ToString(), 18 conn); 19 i = i + 3; 20

21 } 22 } 23

24 conn.Close();

二快速导入导出

1.我们都知道当向db里批量插入数据的时候我们会选择SqlBulkCopy if (dataTable!=null && dataTable.Rows.Count!=0) {

sqlBulkCopy.WriteToServer(dataTable); }

这个可以看 深山老林新发的一篇SQLServer中批量插入数据方式的性能对比下面是

SqlBulkCopy的方法,这个方法有一个弊端就是当excel某一列即有文字,还有日期的时候,会出现null值,我在网上查了一些资料说连接字串加上;HDR=YES;IMEX=1'的时候会都当做字符处理,但是还是会出现一些bug,所以建议最好先把excel数据分析到datatable里然后再用SqlBulkCopy倒入数据库

代码

2.快速导出db的数据到excel 这种方法就是利用 Excel.QueryTables Excel.QueryTable

Querytable把数据快速导入excel里。我们在做复杂报表的时候,这个用的是比较多了,但是单单会这个没有用,它只是快速的把db里的数据放放到excel里,

在做大量数据而且需要设定excel样式的时候我们会选择先用这种方法把数据导入excel一个临时sheet,再利sheet复制,sheet移动,和一些excel样式设定,以及

excel一个强大的自动填充的功能,那么这些就可以让我们快速的做出花样多试的excel报表,当然这个要求我们比较熟练office的操作,包括宏的操作。

代码

com操作excel的一些特性操作:

range.NumberFormatLocal = \; //设置单元格格式为文本 range = (Range)worksheet.get_Range(\, \); //获取Excel多个单元格区域:本例做为Excel表头 range.Merge(0); //单元格合并动作

worksheet.Cells[1, 1] = \单元格赋值\; //Excel单元格赋值

range.Font.Size = 15; //设置字体大小

range.Font.Underline=true; //设置字体是否有下划线 range.Font.Name=\黑体\; 设置字体的种类

range.HorizontalAlignment=XlHAlign.xlHAlignCenter; //设置字体在单元格内的对其方式

range.ColumnWidth=15; //设置单元格的宽度

range.Cells.Interior.Color=System.Drawing.Color.FromArgb(255,204,153).ToArgb(); //设置单元格的背景色 range.Borders.LineStyle=1; //设置单元格边框的粗细 range.BorderAround(XlLineStyle.xlContinuous,XlBorderWeight.xlThick,XlColorIndex.xlColorIndexAutomatic,System.Drawing.Color.Black.ToArgb()); //给单元格加边框 range.EntireColumn.AutoFit(); //自动调整列宽

Range.HorizontalAlignment= xlCenter; // 文本水平居中方式 Range.VerticalAlignment= xlCenter //文本垂直居中方式

Range.WrapText=true; //文本自动换行

Range.Interior.ColorIndex=39; //填充颜色为淡紫色 Range.Font.Color=clBlue; //字体颜色

xlsApp.DisplayAlerts=false; //保存Excel的时候,不弹出是否保存的窗口直接进行保存

workbook.SaveCopyAs(temp);/**////填入完信息之后另存到路径及文件名字

excel宏操作,sheet和单元格操作:

代码

1 ///

2 /// 讀取excel數據和插入公式

3 ///

4 ///

6 protected void Button2_Click(object sender, EventArgs e) 7 {

8 DateTime t1 = DateTime.Now;

9 Response.Write(\ + t1.ToString());

10 Excel.Application excelkk = new Excel.Application();

11

12 excelkk.Workbooks.Add(true); 13 int row = 2;

14 DataTable myTable = ds.Tables[\]; 15 for (int i = 0; i < myTable.Columns.Count; i++) 16 {

17 excelkk.Cells[1, 1 + i] = myTable.Columns[i].ColumnName.ToString(); 18 }

19 for (int i = 0; i < myTable.Rows.Count; i++) 20 {

21 for (int j = 0; j < myTable.Columns.Count; j++) 22 {

23 excelkk.Cells[row, j + 1] = myTable.Rows[i][j].ToString(); 24 }

25

26 row++; 27 } 28

29

30 //取得特定單元格的值

31 excelkk.Visible = true;

32 this.TextBoxChange.Text = excelkk.get_Range(\, Type.Missing).Text.ToString(); 33 //表的單元格合并

34 Excel.Range range1 = excelkk.get_Range(\, \\);

35 range1.Merge(Type.Missing); 36 37 38 39

40 //想表格中插入求和的值

41 Excel.Range range2 = excelkk.get_Range(\, Type.Missing);

42 range2.Formula = \; 43 range2.Calculate(); 44

45 //進行宏的循環應用與單元格的刪除和添加,多個單元格默認宏自動操作。

46 Excel.Range range3 = excelkk.get_Range(\,\5\);

47 range2.AutoFill(range3,Excel.XlAutoFillType.xlFillDefault);

48 //刪除表的指定行數操作

49 Excel.Range range7 = null;

50 range7 = excelkk.get_Range(excelkk.Cells[2, 2], excelkk.Cells[4, 4]);

51 range7.Select();

52 range7.EntireRow.Delete(Excel.XlDirection.xlUp); 53

54 //獲取最大用過的行數

55 Excel.Worksheet wsheet1 = (Excel.Worksheet)excel

kk.Worksheets.get_Item(1);

56 int n =wsheet1.UsedRange.Cells.Columns.Count; 57 Response.Write(n.ToString() + \); 58 //MessageBox.Show(n.ToString());

59 n = wsheet1.UsedRange.Cells.Rows.Count; 60 Response.Write(n.ToString() + \); 61 //MessageBox.Show(n.ToString()); 62 //數據的複製

63 Excel.Range range4 = excelkk.get_Range(\, \5\);

64 Excel.Range range5 = excelkk.get_Range(\, \5\);

65 //range4.get_Offset(1,4).Select(); 66 range4.Copy(range5); 67 //停用警告信息

68 excelkk.DisplayAlerts = false; 69 GC.Collect(); 70

71 } 72 73

74 單個sheet里求和:

75 Excel.Range range2 = excelkk.get_Range(\, Type.Missing);

76 range2.Formula = \; 77 range2.Calculate(); 78

79 跨sheet求和:

80 Excel.Worksheet wsheet1 = (Excel.Worksheet)excelSql.Worksheets.get_Item(1);

81 Excel.Range range3 =wsheet1.get_Range(\, Type.Missing);

82 range3.Formula = \; 83 range3.Calculate(); 84

虽然我们拥有强大的NPOI,不过我还是写出来,希望对大家理解office有一定的用处。 有错误的地方欢迎大家拍砖,希望交流和共享。

MR_ke

关注 - 6 粉丝 - 9

关注博主

6 0

(请您对文章做出评价)

C#操作Excel文件(读取Excel,写入Excel) 收藏 < type=\alimama_pid=\alimama_titlecolor=\alimama_descolor =\alimama_bgcolor=\alimama_bordercolor=\alimama_linkcolor=\alimama_bottomcolor=\alimama_anglesize=\alimama_bgpic=\alimama_icon=\alimama_sizecode=\alimama_width=658; alimama_height=60; alimama_type=2; < src=\

看到论坛里面不断有人提问关于读取excel和导入excel的相关问题。闲暇时间将我所知道的对excel的操作加以总结,现在共享大家,希望给大家能够给大家带了一定的帮助。 另外我们还要注意一些简单的问题1.excel文件只能存储65535行数据,如果你的数据大于65535行,那么就需要将excel分割存放了。2.关于乱码,这主要是字符设置问题。

1.加载Excel(读取excel内容)返回值是一个DataSet

//加载Excel

public static DataSet LoadDataFromExcel(string filePath) {

try {

string strConn;

strConn = \Source=\+ filePath + \

OleDbConnection OleConn = new OleDbConnection(strConn); OleConn.Open();

String sql = \* FROM [Sheet1$]\可是更改Sheet名称,比如sheet2,等等

OleDbDataAdapter OleDaExcel = new OleDbDataAdapter(sql, OleConn); DataSet OleDsExcle = new DataSet(); OleDaExcel.Fill(OleDsExcle, \ OleConn.Close(); return OleDsExcle;

}

catch (Exception err) {

MessageBox.Show(\数据绑定Excel失败!失败原因:\提示信息\

MessageBoxButtons.OK, MessageBoxIcon.Information); return null; } }

2.写入Excel内容,参数:excelTable是要导入excel的一个table表 < type=\alimama_pid=\alimama_type=\alimama_sizecode =\alimama_fontsize=12; alimama_bordercolor=\alimama_bgcolor=\alimama_titlecolor=\alimama_underline=0; alimama_height=22; alimama_width=0; < src=\

public static bool SaveDataTableToExcel(System.Data.DataTable excelTable, string filePath) {

Microsoft.Office.Interop.Excel.Application app =

new Microsoft.Office.Interop.Excel.ApplicationClass(); try {

app.Visible = false;

Workbook wBook = app.Workbooks.Add(true);

Worksheet wSheet = wBook.Worksheets[1] as Worksheet; if (excelTable.Rows.Count > 0) {

int row = 0;

row = excelTable.Rows.Count;

int col = excelTable.Columns.Count; for (int i = 0; i < row; i++) {

for (int j = 0; j < col; j++) {

string str = excelTable.Rows[i][j].ToString(); wSheet.Cells[i + 2, j + 1] = str; } } }

int size = excelTable.Columns.Count; for (int i = 0; i < size; i++) {

wSheet.Cells[1, 1 + i] = excelTable.Columns[i].ColumnName;

}

//设置禁止弹出保存和覆盖的询问提示框 app.DisplayAlerts = false;

app.AlertBeforeOverwriting = false; //保存工作簿 < type=\alimama_pid=\alimama_type=\alimama_sizecode =\alimama_fontsize=12; alimama_bordercolor=\alimama_bgcolor=\alimama_titlecolor=\alimama_underline=0; alimama_height=22; alimama_width=0; < src=\ wBook.Save(); //保存excel文件 app.Save(filePath);

app.SaveWorkspace(filePath); app.Quit(); app = null; return true; }

catch (Exception err) {

MessageBox.Show(\导出Excel出错!错误原因:\提示信息\

MessageBoxButtons.OK, MessageBoxIcon.Information); return false; }

finally { } }

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gisfarmer/archive/2009/01/09/3738959.aspx

本文来源:https://www.bwwdw.com/article/arxt.html

Top