C# 操作 Excel
2005-03-26 02:39
429 查看
首先将excel.exe copy 到 ../Microsoft Visual Studio .NET 2003/SDK/v1.1/Bin目录下
利用.net 中带的工具在命令提示符下执行tlbimp excel.exe.这样就不会因为你的Excel是xp或2000的不同要去找不同的*.olb文件,还有一点就是因为在2000以后的版本中没有了excel9.olb这个文件了。
通过执行tlbimp excel.exe后我们会得到excel.dll文件。
只要有了这个Excel.dll,现在我们就能使用Excel的各种操作函数了。
下面就让我们具体看看C#是如何使用这些东东吧。
1. 创建一个新Excel的Application:
Application exc = new Application();
if (exc == null) {
Console.WriteLine("ERROR: EXCEL couldn't be started");
return 0;
}
2. 让这个工程可见:
exc.set_Visible(0, true);
3. 获取WorkBooks集合:
Workbooks workbooks = exc.Workbooks;
4. 加入新的WorkBook:
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);
5. 获取WorkSheets集合:
_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
if (worksheet == null) {
Console.WriteLine ("ERROR in worksheet == null");
}
6. 给单元格设置变量:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Range range1 = worksheet.get_Range("C1",Missing.Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if (range1 == null)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine ("ERROR: range == null");
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
const int nCells = 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Object[] args1 = new Object[1];
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
args1[0] = nCells;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
range1.GetType().InvokeMember("Value",BindingFlags.SetProperty, null, range1, args1);
例程:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Reflection;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Runtime.InteropServices;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using Excel;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
class Excel
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public static int Main()
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Application exc = new Application();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if (exc == null)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("ERROR: EXCEL couldn't be started!");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
exc.set_Visible(0, true);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Workbooks workbooks = exc.Workbooks;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Sheets sheets = workbook.Worksheets;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if (worksheet == null)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine ("ERROR: worksheet == null");
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Range range1 = worksheet.get_Range("C1", Missing.Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if (range1 == null)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine ("ERROR: range == null");
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
const int nCells = 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Object[] args1 = new Object[1];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
args1[0] = nCells;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
range1.GetType().InvokeMember("Value", BindingFlags.SetProperty, null,range1, args1);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return 100;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
现在我们来看看如何使用数组,他有些类似于设置单元格。仅仅需要的改变只是args2[0] = array2;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
const int nCell = 5;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Range range2 = worksheet.get_Range("A1", "E1");
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int[] array2 = new int [nCell];
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
for (int i=0; i < array2.GetLength(0); i++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
array2[i] = i+1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Object[] args2 = new Object[1];
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
args2[0] = array2;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
range2.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range2, args2);
大家需要了解Tlbimp这个工具的使用啊:)这个东东很有用,可以将普通Win32程序移植到.Net下面来:)
如果操作的excel的格式很简单,就是一般的表的结构,那么其实操作EXCEL文件跟操作ACCESS数据库文件的方法几乎一样。
(需要注意的地方就是,1、程序会把EXCLE表中的第一行记录作为列名;2、在使用EXCLE表的时候, 要在表名后面加上符号$)
下面,我给你帖一段如何连接和读取EXCEL文件的代码吧:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
DataSet ds = new DataSet();
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
OleDbDataAdapter ad;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
string strDbPath = "./code.xls";
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
string strConn = "Provider=Microsoft.Jet.OleDb.4.0; Data Source="+Server.MapPath(strDbPath)+"; Extended Properties=Excel 8.0;";
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
OleDbConnection Conn = new OleDbConnection(strConn);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Conn.Open();
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
string strSQL = "select * from [股票代码$]";
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ad = new OleDbDataAdapter(strSQL, Conn);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ad.Fill(ds);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dg1.DataSource = ds.Tables[0].DefaultView; //dg1是一个DataGrid控件
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dg1.DataBind(); //将EXCLE中股票代码中的记录棒定到DataGrid控件上
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
如果是在asp.net 下使用的话,要记得在 <system.web>中添加<identity impersonate="true"/>
否则就会出现 “异常详细信息: System.UnauthorizedAccessException: 拒绝访问“。
利用.net 中带的工具在命令提示符下执行tlbimp excel.exe.这样就不会因为你的Excel是xp或2000的不同要去找不同的*.olb文件,还有一点就是因为在2000以后的版本中没有了excel9.olb这个文件了。
通过执行tlbimp excel.exe后我们会得到excel.dll文件。
只要有了这个Excel.dll,现在我们就能使用Excel的各种操作函数了。
下面就让我们具体看看C#是如何使用这些东东吧。
1. 创建一个新Excel的Application:
Application exc = new Application();
if (exc == null) {
Console.WriteLine("ERROR: EXCEL couldn't be started");
return 0;
}
2. 让这个工程可见:
exc.set_Visible(0, true);
3. 获取WorkBooks集合:
Workbooks workbooks = exc.Workbooks;
4. 加入新的WorkBook:
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);
5. 获取WorkSheets集合:
_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
if (worksheet == null) {
Console.WriteLine ("ERROR in worksheet == null");
}
6. 给单元格设置变量:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Range range1 = worksheet.get_Range("C1",Missing.Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
if (range1 == null)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine ("ERROR: range == null");
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
const int nCells = 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Object[] args1 = new Object[1];
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
args1[0] = nCells;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
range1.GetType().InvokeMember("Value",BindingFlags.SetProperty, null, range1, args1);
例程:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Reflection;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using System.Runtime.InteropServices;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
using Excel;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
class Excel
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
public static int Main()
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Application exc = new Application();
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if (exc == null)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine("ERROR: EXCEL couldn't be started!");
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return 0;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
exc.set_Visible(0, true);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Workbooks workbooks = exc.Workbooks;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Sheets sheets = workbook.Worksheets;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if (worksheet == null)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine ("ERROR: worksheet == null");
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Range range1 = worksheet.get_Range("C1", Missing.Value);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedSubBlock.gif)
if (range1 == null)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Console.WriteLine ("ERROR: range == null");
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
const int nCells = 1;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
Object[] args1 = new Object[1];
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
args1[0] = nCells;
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
range1.GetType().InvokeMember("Value", BindingFlags.SetProperty, null,range1, args1);
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
return 100;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
现在我们来看看如何使用数组,他有些类似于设置单元格。仅仅需要的改变只是args2[0] = array2;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
const int nCell = 5;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Range range2 = worksheet.get_Range("A1", "E1");
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int[] array2 = new int [nCell];
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
for (int i=0; i < array2.GetLength(0); i++)
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
array2[i] = i+1;
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Object[] args2 = new Object[1];
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
args2[0] = array2;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
range2.GetType().InvokeMember("Value", BindingFlags.SetProperty, null, range2, args2);
大家需要了解Tlbimp这个工具的使用啊:)这个东东很有用,可以将普通Win32程序移植到.Net下面来:)
如果操作的excel的格式很简单,就是一般的表的结构,那么其实操作EXCEL文件跟操作ACCESS数据库文件的方法几乎一样。
(需要注意的地方就是,1、程序会把EXCLE表中的第一行记录作为列名;2、在使用EXCLE表的时候, 要在表名后面加上符号$)
下面,我给你帖一段如何连接和读取EXCEL文件的代码吧:
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
DataSet ds = new DataSet();
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
OleDbDataAdapter ad;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
string strDbPath = "./code.xls";
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
string strConn = "Provider=Microsoft.Jet.OleDb.4.0; Data Source="+Server.MapPath(strDbPath)+"; Extended Properties=Excel 8.0;";
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
OleDbConnection Conn = new OleDbConnection(strConn);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
Conn.Open();
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
string strSQL = "select * from [股票代码$]";
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ad = new OleDbDataAdapter(strSQL, Conn);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
ad.Fill(ds);
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dg1.DataSource = ds.Tables[0].DefaultView; //dg1是一个DataGrid控件
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
dg1.DataBind(); //将EXCLE中股票代码中的记录棒定到DataGrid控件上
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
如果是在asp.net 下使用的话,要记得在 <system.web>中添加<identity impersonate="true"/>
否则就会出现 “异常详细信息: System.UnauthorizedAccessException: 拒绝访问“。
相关文章推荐
- C#操作Excel
- C#操作Excel文件(读取Excel,写入Excel)
- 使用C#和Excel进行报表开发(五)-操作单元格边框和颜色
- c#操作wps中的excel
- C#与Excel互操作
- C# 操作 Excel 文件(.xls 或 .xlsx)
- C#对Excel的样式操作
- C#操作excel(多种方法比较)
- C#操作Excel总结
- 使用VSIUAL C#.NET操作Excel -把DataTable中的数据写入Excel
- C#与excel互操作的错误无法将类型为“Excel.ApplicationClass”的COM 对象强制转换为接口类型“Excel._Application”
- c# 处理EXCEL 操作包括查询以及增改
- C#操作Excel---技巧篇(下)
- C#对Excel的基本操作
- c#操作excel
- C#操作Excel(创建、打开、读写、保存)几种方法的总结
- C#后期绑定操作Excel
- 在C#中关于excel的导入和导出操作
- C# 操作Excel的类
- C# 操作Excel的类(接上一篇)