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

MR_ke

人生不能永恒,但求此刻真实。

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

我们在做excel资料的时候,通常有以下方法。

一.导入导出excel常用方法:

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

  

public static string strCon = " Provider = Microsoft.Jet.OLEDB.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 = "select * from [Sheet1$]";

conn.Open();

OleDbDataAdapter myCommand = new OleDbDataAdapter(sql, strCon);

ds = new DataSet();

myCommand.Fill(ds, "[Sheet1$]");

conn.Close();

datagrid1.DataMember = "[Sheet1$]";

datagrid1.DataSource = ds;

datagrid1.DataBind();

//Excel.Application excel = new Excel.Application();

//excel.Application.Workbooks.Add(true);

//excel.Visible = true;

}



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

  

1 string str = @"Data Source=IT-428E4EA4B0C7SQLEXPRESS;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("A" + i, Type.Missing).Text.ToString() == "" && n <= 3)

11 { n++; }

12 else

13 {

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

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

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

17 msheet.Cells.get_Range("B" + (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倒入数据库

  

1 // block copy to DB from Excel

2 //By xijun,

3 //step 1 create an excel file C:Inetpubwwwroottest.xls , fill cell(1,1) with "Data",cell(1,2) with "name"

4 //step 2 create table named "Data" with 2 column ("data","name") in your DB

5 //there the code below:

6 DateTime t1 = DateTime.Now;

7 Response.Write("<br>start time:" + t1.ToString());

8 string ExcelFile = @"C:\20090916_Hub_Report.xls";

9 string excelConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + ExcelFile + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";

10

11 using (OleDbConnection excelConnection = new OleDbConnection(excelConnectionString))

12 {

13

14 excelConnection.Open();

15 //Getting source data

16 //非空讀入數據

17 OleDbCommand command = new OleDbCommand("Select [Region],[CustomerPN],[RMA],[Date],[QTY],[Return/Pull] FROM [20090916_Hub_Report$] ", excelConnection);

18 // Initialize SqlBulkCopy object

19

20 using (OleDbDataReader dr = command.ExecuteReader())

21 {

22 // Copy data to destination

23 string sqlConnectionString = @"Data Source=MININT-G87PHNASQLEXPRESS;Initial Catalog=GDS_Service;Integrated Security=True";

24 using (SqlBulkCopy bulkCopy = new SqlBulkCopy(sqlConnectionString))

25 {

26 bulkCopy.DestinationTableName = "GDS_Hub_data";

27 //加入只加入一個列的話,那么就會其他數據庫列都默認為空。

28 bulkCopy.ColumnMappings.Add("Region", "region");

29 bulkCopy.ColumnMappings.Add("CustomerPN", "customer_item_number");

30 bulkCopy.ColumnMappings.Add("RMA", "Rma");

31 bulkCopy.ColumnMappings.Add("Date", "date");

32 bulkCopy.ColumnMappings.Add("QTY", "Qty_1");

33 bulkCopy.ColumnMappings.Add("Return/Pull", "return_pull");

34 //bcp.BatchSize = 100;//每次传输的行数

35 //bcp.NotifyAfter = 100;//进度提示的行数

36 bulkCopy.BatchSize = 100;

37 bulkCopy.NotifyAfter = 100;

38 bulkCopy.WriteToServer((IDataReader)dr);

39

40

41 }

42 }

43 //Closing connection

44 excelConnection.Close();

45 }

46

47 DateTime t2 = DateTime.Now;

48 Response.Write("<br>End time:" + t2.ToString());

49 Response.Write("<br>use time:" + ((TimeSpan)(t2 - t1)).Milliseconds.ToString() + " Milliseconds");

50 Response.Write("<br>inser record count :3307");



2.快速导出db的数据到excel

这种方法就是利用

Excel.QueryTables

Excel.QueryTable

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

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

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

  

1 public string query_table_getdata(string sourpath)

2 {

3 string str_path = sourpath.Substring(0, sourpath.Length - 22);

4 str_path = str_path + "basic.xls";

5

6 Excel.QueryTables m_objQryTables = null;

7 Excel.QueryTable m_objQryTable = null;

8 Excel.Application m_objExcel = null;

9 Excel.Workbooks m_objBooks = null;

10 Excel.Workbook m_objBook = null;

11 Excel.Sheets m_objSheets = null;

12 Excel.Worksheet m_objSheet = null;

13 Excel.Range m_objRange = null;

14 m_objExcel = new Excel.Application();

15

16 //try

17 //{

18 m_objBooks = m_objExcel.Workbooks;

19 m_objBooks.Open(sourpath, Type.Missing, Type.Missing, Type.Missing, Type.Missing,

20 Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

21

22 m_objBook = (Excel.Workbook)m_objBooks.get_Item(1);

23

24

25 m_objSheets = (Excel.Sheets)m_objBook.Worksheets;

26 m_objSheet = (Excel.Worksheet)m_objSheets.get_Item(1);

27 m_objRange = m_objSheet.get_Range("A2", Type.Missing);

28 m_objQryTables = m_objSheet.QueryTables;

29 string sqlstr = "SELECT [day01],[day02],[day03],[day04],[day05],[day06],[day07],[day08],[day09],[day10],[day11],[day12],[day13],[day14]";

30 sqlstr += ",[week01] ,[week02],[week03],[week04],[week05],[week06],[week07],[week08],[week09],[week10],[week11],[week12],[week13],[week14]";

31 sqlstr += ",[week15],[week16],[week17],[week18],[week19],[week20],[week21],[week22],[week23],[week24]";

32 sqlstr += " FROM [GDS_Service].[dbo].[GDS_Service_Report_Base] order by groupID ,id";

33 //可以放在配置文件里

34 string conn = @"Provider=SQLOLEDB.1;Data Source=MININT-G87PHNASQLEXPRESS;uid=xijun_ke;Password=12345678;

Initial Catalog=GDS_Service;Persist Security Info=False;";

35

36 m_objQryTable = (Excel.QueryTable)m_objQryTables.Add("OLEDB;" + conn, m_objRange, sqlstr);

37

38 m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;

39

40 m_objQryTable.Refresh(false);

41 m_objBook.SaveAs(str_path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

42 m_objBook.Close(false, Type.Missing, Type.Missing);

43 //}

44 //catch (Exception ee)

45 //{

46 // mp.WriteLog(ee.ToString());

47 //}

48 //finally

49 //{

50 m_objExcel.Quit();

51 GC.Collect();

52 //}

53 return str_path;

54

55 }



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



range.NumberFormatLocal="@";//设置单元格格式为文本

range=(Range)worksheet.get_Range("A1","E1");//获取Excel多个单元格区域:本例做为Excel表头

range.Merge(0);//单元格合并动作

worksheet.Cells[1,1]="Excel单元格赋值";//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 /// <summary>

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

3 /// </summary>

4 /// <param name="sender"></param>

5 /// <param name="e"></param>

6 protected void Button2_Click(object sender, EventArgs e)

7 {

8 DateTime t1 = DateTime.Now;

9 Response.Write("<br>start time:" + t1.ToString());

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

11

12 excelkk.Workbooks.Add(true);

13 int row = 2;

14 DataTable myTable = ds.Tables["[Sheet1$]"];

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("A2", Type.Missing).Text.ToString();

33 //表的單元格合并

34 Excel.Range range1 = excelkk.get_Range("A2", "D4");

35 range1.Merge(Type.Missing);

36

37

38

39

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

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

42 range2.Formula = "=SUM(B2:B24)";

43 range2.Calculate();

44

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

46 Excel.Range range3 = excelkk.get_Range("B25","E25");

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)excelkk.Worksheets.get_Item(1);

56 int n =wsheet1.UsedRange.Cells.Columns.Count;

57 Response.Write(n.ToString() + "<br>");

58 //MessageBox.Show(n.ToString());

59 n = wsheet1.UsedRange.Cells.Rows.Count;

60 Response.Write(n.ToString() + "<br>");

61 //MessageBox.Show(n.ToString());

62 //數據的複製

63 Excel.Range range4 = excelkk.get_Range("A2", "B25");

64 Excel.Range range5 = excelkk.get_Range("E3", "F25");

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("B25", Type.Missing);

76 range2.Formula = "=SUM(B2:B24)";

77 range2.Calculate();

78

79 跨sheet求和:

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

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

82 range3.Formula = "=Sheet3!B8+Sheet3!B12";

83 range3.Calculate();

84



虽然我们拥有强大的NPOI,不过我还是写出来,希望对大家理解office有一定的用处。

有错误的地方欢迎大家拍砖,希望交流和共享。

分类: C#操作excel

绿色通道: 好文要顶 关注我 收藏该文与我联系

MR_ke

关注 - 8

粉丝 - 144

+加关注

18

0

(请您对文章做出评价)

? 上一篇:SQL进阶提升(xml合并拆分详细实例)

? 下一篇:C#操作excel(chart)

posted on 2010-03-02 09:56 MR_ke 阅读(73387) 评论(45) 编辑 收藏

评论

#1楼 2010-03-02 10:19xoyozo

留名收藏,EXCEL的导入导出绝对会遇到。

另C#网站开发QQ群:105325933

支持(0)反对(0)

http://pic.cnitblog.com/face/u26482.jpg回复引用

#2楼 2010-03-02 10:25Jack Fan

支持楼主!

支持(0)反对(0)

http://pic.cnitblog.com/face/u38209.png回复引用

#3楼[楼主] 2010-03-02 10:49MR_ke

@Jack Fan

谢谢。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#4楼[楼主] 2010-03-02 10:50MR_ke

@xoyozo

谢谢。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#5楼 2010-03-02 11:32zantesu

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

这个方法中

string sql = "select * from [Sheet1$]";

如果表的名字不是Sheet1怎么办呢

支持(0)反对(0)

回复引用

#6楼[楼主] 2010-03-02 11:50MR_ke

@zantesu

把sheet1改成你本来的表名,如果不知道但是知道那个sheet是第几个可以通过

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

wsheet1.Name获取sheet名称

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#7楼 2010-03-02 14:03Console.C#

有没有 SQL <-->Access直接快速数据导出的内容?

支持(0)反对(0)

回复引用

#8楼 2010-03-02 14:20晃来晃去

asp.net、mvc、ajax、jquery、javascript技术交流上QQ群33989004

支持(0)反对(0)

回复引用

#9楼[楼主] 2010-03-02 14:29MR_ke

@Console.C#

这个没有,为什么要acces和sql互导啊?有sql的db之间互相导入导出。不过可以看看这个地址,这些可以问问百度和Google老师http://dev.csdn.net/article/47/47316.shtm

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#10楼 2010-03-02 15:08Jack Niu

还有一种是基于OpenXML的实现,比较喜欢这个

--Jack

支持(0)反对(0)

http://pic.cnitblog.com/face/u16971.jpg回复引用

#11楼[楼主] 2010-03-02 16:51MR_ke

@Jack Niu

谢谢指教。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#12楼 2010-03-02 17:25兽王俾斯麦

最末尾调用GC执行垃圾回收我觉得不必要,这样会打乱CLR自身的垃圾回收进程。

支持(0)反对(0)

回复引用

#13楼 2010-03-02 17:32木乃伊

不错。excel操作常遇到。

支持(0)反对(0)

http://pic.cnitblog.com/face/u59126.jpg?id=15110833回复引用

#14楼[楼主] 2010-03-02 18:49MR_ke

@兽王俾斯麦

gc唤醒操作,但是它不影响CLR自身的垃圾回收进程,gc本来就是堆栈满时候进行回收。其实这里也是没有必要用,但是excel的com对象申明太多,所以手动回收了而已。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#15楼[楼主] 2010-03-02 18:49MR_ke

@兽王俾斯麦

欢迎指教。。。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#16楼 2010-03-21 04:56zantesu

引用MR_ke:

@zantesu

把sheet1改成你本来的表名,如果不知道但是知道那个sheet是第几个可以通过

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

wsheet1.Name获取sheet名称

本来的表名是中文名..结果什么都读不出来,获得的表名都是乱码,怎么办呢....

支持(0)反对(0)

回复引用

#17楼[楼主] 2010-03-21 12:14MR_ke

@zantesu

应该不会,你的操作系统是繁体,你装的office是简体吗?

System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.UTF8)

//重新设置一下excel的编码格式,作用是防止中文文件名乱码

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#18楼 2010-03-21 14:17zantesu

操作系统和office都是英文版

DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

string tableName = dt.Rows[0][2].ToString().Trim();

这个获得的表名都是???$之类...

支持(0)反对(0)

回复引用

#19楼[楼主] 2010-03-22 08:13MR_ke

@zantesu

System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.Unicode)你把excel编码格式改成这样吧,它适合一切编码。UTF8这个事中文的。

再不行你把代码贴出来看看。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#20楼 2010-03-22 19:11zantesu

?

1

2

3

4

5

6

7

8

9

10

11

12

Microsoft.Win32.OpenFileDialog open = new Microsoft.Win32.OpenFileDialog();

if (open.ShowDialog().Value)

{

string strCon = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=Excel 8.0", open.FileName);

using (OleDbConnection conn = new OleDbConnection(strCon))

{

conn.Open();

DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });

string tableName = dt.Rows[0][2].ToString().Trim();

MessageBox.Show(tableName);

}

}

tableName读出来是"???$"

因为我写的是WPF程序,System.Web.HttpUtility这个应该没法用吧

无法添加System.Web的引用,手动添加System.Web.dll也不行

支持(0)反对(0)

回复引用

#21楼[楼主] 2010-03-23 08:43MR_ke

@zantesu

肯定能加的,给你一个参考看看。

http://blog.csdn.net/ghj1976/archive/2009/12/02/4922743.aspx

操作系统和office都是英文版,为什么命名用中文不懂。。。。

这个应该是你自己机器上的环境吧。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#22楼 2010-03-23 15:02zantesu

@MR_ke

开发环境都是英文的...但需要处理的Excel文件来自其他人,没办法.我试试吧

支持(0)反对(0)

回复引用

#23楼 2010-03-23 23:58zantesu

System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.Unicode)这样不行,文件都读不出来了...

支持(0)反对(0)

回复引用

#24楼[楼主] 2010-03-24 09:21MR_ke

@zantesu

如果能引用,能用System.Web.HttpUtility.UrlEncode(FileName, System.Text.Encoding.Unicode)这个,你可以执行完这段代码后再打开excel看能打开不,如果能打开就能读的。如果不能就换下其它编码格式试试,单步调试看看就知道了。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#25楼 2010-10-21 22:35D.Ulong

每个在学习C#过程中都会碰到的问题,值得收藏

支持(0)反对(0)

http://pic.cnitblog.com/face/u170590.jpg回复引用

#26楼[楼主] 2010-10-22 15:04MR_ke

@D.Ulong

如果允许你可以研究一下NPOI这开源项目,不过现在最好用1.2.1用com组件会有很多麻烦,其中线程杀不掉是最棘手的。

http://npoi.codeplex.com/releases/view/49524

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#27楼 2010-12-01 14:25JasonNET

最近刚好遇到这样的问题,多谢楼主分享!

支持(0)反对(0)

http://pic.cnitblog.com/face/u129019.jpg回复引用

#28楼 2010-12-09 17:49程序员之死

按你说写的第一个导出, 报 "Microsoft Jet 数据库引擎找不到对象'Sheet1'。请确定对象是否存在,并正确地写出它的名称和路径。",这个问题怎么解决呢?

支持(0)反对(0)

回复引用

#29楼[楼主] 2010-12-12 11:12MR_ke

@程序员之死

你的excel里不存在sheet名为sheet1的表,如果是写死了的话,那么你只能要求用户必须命名为sheet1,还有一个办法,就是你知道是第几个sheet,那么你可以通过先获取sheet的name,然后select * from SheetName.

获取sheetname的方法。。。我后面可能会写NPOI到处excel,这个读excel很快的。

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

wsheet1.Name获取sheet名称

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#30楼 2011-04-16 17:01无业の游民

我在做Excel数据导入DB的过程中,数据能够导入到数据库中,但是就是DB中汉字出现乱码 。。。(使用的是SqlBulkCopy) 请指教 该如何解决??

支持(0)反对(0)

http://pic.cnitblog.com/face/u99500.jpg回复引用

#31楼[楼主] 2011-04-19 12:38MR_ke

@无业の游民

public static string strCon = " Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source =C:\08.xls;Extended Properties=Excel 8.0";

Properties=Excel 8.0 看这个配置对没有

还有可以

HttpUtility.UrlEncode(FileName, Encoding.UTF8)看看

http://www.tzwhx.com/newOperate/html/1/11/112/18716.html

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#32楼 2011-07-08 16:01aobaluo

xuexi

支持(0)反对(0)

回复引用

#33楼 2011-09-08 01:25maochenai

excelkk.Cells[1, 1 + i] 返回的是object,怎么获取值啊,tostring()返回的是类型

支持(0)反对(0)

回复引用

#34楼 2011-09-08 01:38maochenai

应该是这样

Range r = (Range)sheet1.Cells[1, 1];

MessageBox.Show(r.Text.ToString());

支持(0)反对(0)

回复引用

#35楼[楼主] 2011-09-08 12:26MR_ke

@maochenai

我那时候操作的是2003,如果是03的就没有问题。。

现在都不用com了,用NPOI吧,自己封装,对服务器又没有影响。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#36楼 2011-09-09 09:00斗城路人

asp.net(C#)交流群85406357 欢迎加入交流

支持(0)反对(0)

回复引用

#37楼 2011-11-15 10:57liuhh

.net 操作excel很常见的操作 呵呵

支持(0)反对(0)

http://pic.cnitblog.com/face/u28647.jpg?id=10233449回复引用

#38楼[楼主] 2011-11-15 11:39MR_ke

@liuhh

是的

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#39楼 2011-11-29 09:41伍华聪

关于Excel等相关文件的操作,我的共用类库也提供丰富的操作。

厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)

http://www.cnblogs.com/wuhuacong/archive/2011/07/30/2121829.html

1、CSV文件和DataTable对象转换辅助类 CSVHelper

2、 Excel操作辅助类(无需VBA引用) ExcelHelper

.....

6、 INI文件操作辅助类 INIFileUtil

支持(0)反对(0)

http://pic.cnitblog.com/face/u8867.png回复引用

#40楼 2012-01-16 23:34Yayba

我现在也再用.NET操作Excel,现在需要在一个单元格内写入几种不同样式的文字,不知该如何处理,请指教,谢谢!

支持(0)反对(0)

回复引用

#41楼 2012-05-16 16:34小四儿

@Jack Niu

OpenXml的实现有没有具体的代码,我倒是知道excel是xml的变异

现在客户需要用64位的机器,而且office版本是32位的,就是说数据访问协议不能用,而且还不能改客户的东西,所以需要其他的渠道获取excel数据文件。oledb是不能用了。

如果xml可行的话,需要更详细的代码。

317295819@qq.com

支持(0)反对(0)

http://pic.cnitblog.com/face/u395144.jpg?id=05112001回复引用

#42楼[楼主] 2012-05-17 10:38MR_ke

@小四儿

用NPOI吧。 源码地址

http://npoi.codeplex.com/

现在最新版本应该是比较完整了。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

#43楼 2012-10-24 11:16Lonely Bandit

好好学习,天天向上!!!o(∩_∩)o

支持(0)反对(0)

http://pic.cnitblog.com/face/u103925.jpg?id=13152915回复引用

#44楼 2013-04-23 14:36秋秋lee

c#操作excel2010 , 使用saveCopyAs(路徑)方法時報錯: SaveCopyAs 方法失敗。

有沒有方法解呀?

支持(0)反对(0)

回复引用

#45楼[楼主]26645922013/4/23 16:07:01 2013-04-23 16:07MR_ke

@秋秋lee

很久没用这个了,你可以网上搜索一下资料。

支持(0)反对(0)

http://pic.aIhUAu.cOm/img/2015/11/18/34163840_4160839.jpg回复引用

刷新评论刷新页面返回顶部

发表评论

昵称:

评论内容:

          

不改了 注销 订阅评论

[使用Ctrl+Enter键快速提交]

博客园首页博问新闻闪存程序员招聘知识库

公告

昵称:MR_ke

园龄:3年10个月

粉丝:144

关注:8 +加关注

导航

博客园 首页 新随笔 联系 订阅 管理

<2010年3月>

日一二三四五六

28123456

78910111213

14151617181920

21222324252627

28293031123

45678910

统计

随笔 - 42 文章 - 1 评论 - 248 引用 - 0

搜索

常用链接

我的随笔 我的评论 我的参与 最新评论 我的标签

随笔分类

C#(7) C#操作excel(6) components(2) Daily Notes(1) JavaScript JQuery(2) MSchart(3) SQL Server 2005(18) VBA(2)

随笔档案

2013年7月 (1) 2012年10月 (1) 2012年6月 (1) 2012年3月 (1) 2011年6月 (2) 2011年5月 (1) 2010年8月 (2) 2010年3月 (9) 2010年2月 (24)

最新评论

1. Re:C#操作excel(多种方法比较) @秋秋lee

很久没用这个了,你可以网上搜索一下资料。 --MR_ke 2. Re:C#操作excel(多种方法比较) c#操作excel2010 , 使用saveCopyAs(路徑)方法時報錯: SaveCopyAs 方法失敗。

有沒有方法解呀? --秋秋lee 3. Re:SQL进阶提升(疑惑篇order by)-学习sql server2005 step by step(十一) 对于相同的aa, WHERE aa=a.aa 这个条件是一样的

那么两个查询都是一样的啊,跟索引假脱机有毛关系? --桦仔 4. Re:SQL进阶提升(疑惑篇order by)-学习sql server2005 step by step(十一) 不是很明白啊 newid那个例子 --桦仔 5. Re:C#操作excel(NPOI篇) @stewen

不会,这个不是通过com主键调用的。 --MR_ke

阅读排行榜

1. C#操作excel(多种方法比较)(73386) 2. Mschart学习(MSchart介绍)(19028) 3. C#操作excel(NPOI篇)(18281) 4. Sql养成一个好习惯是一笔财富(7621) 5. Mschart学习(官方demo共享)(4627)

评论排行榜

1. C#操作excel(多种方法比较)(45) 2. Sql养成一个好习惯是一笔财富(39) 3. C#操作excel(NPOI篇)(27) 4. sql server复灾 你懂了吗?(17) 5. C#操作excel(上路篇)(15)

推荐排行榜

1. Sql养成一个好习惯是一笔财富(44) 2. C#操作excel(多种方法比较)(18) 3. Mschart学习(MSchart介绍)(11) 4. sql server复灾 你懂了吗?(10) 5. C#操作excel(NPOI篇)(9)

Powered by: 博客园 Copyright ? MR_ke

  

爱华网本文地址 » http://www.aihuau.com/a/25101011/89159.html

更多阅读

如何下载免费的遥感影像数据(多种方法 遥感影像数据库

如何下载免费的遥感影像数据(多种方法)——简介我们都知道购买遥感影像需要很多钱,并且并不是有钱就能随便购买的,需要通过相关机构,网站购买。另外,对于学习使用来说,学生和个人就无法购买得起遥感影像!但是,在学习中有图有真相才会学得到

教你打开任务管理器的多种方法 精 无法打开任务管理器

教你打开任务管理器的多种方法 精——简介 任务管理器是经常要用到的程序,在任务管理器中所有的程序和服务都显示了出来,我们可以了解系统正在运行着哪些程序和服务,我们也可以用它来结束一些程序和服务。而且有一些恶意的软件并不能被

如何进行屏幕截图,多种方法一一介绍 怎么进行屏幕截图

如何进行屏幕截图,多种方法一一介绍——简介下面为大家介绍一些截取桌面的一些软件和一些小技巧如何进行屏幕截图,多种方法一一介绍——方法/步骤如何进行屏幕截图,多种方法一一介绍 1、1.QQ截屏玩QQ的人都清楚在你的QQ聊天界面的窗口

C#:XML操作类

写的一个XML操作类,包括读取/插入/修改/删除。using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebCo

声明:《C#操作excel(多种方法比较) c excel操作类》为网友飞翔的風分享!如侵犯到您的合法权益请联系我们删除