如何使用C#操作Excel表格!!!

mqzzzm 2004-12-22 05:41:26
各位大侠:
小弟最近有一事不明,老板给了一个任务,要求使用C#操作Excel表格,小弟对C#实在是初学,
很多事情不明白,实在是不知道如何写这段程序!!还请各位大侠帮忙!!
小弟也下载了几个例子,但是还是无法运行!
下面是我下载的程序:

首先将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的各种操作函数了。
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using Excel;
class Excel {
public static int Main() {
Application exc = new Application();
if (exc == null) {
Console.WriteLine("ERROR: EXCEL couldn't be started!");
return 0;
}
exc.set_Visible(0, true);
Workbooks workbooks = exc.Workbooks;
_Workbook workbook = workbooks.Add(XlWBATemplate.xlWBATWorksheet, 0);
Sheets sheets = workbook.Worksheets;
_Worksheet worksheet = (_Worksheet) sheets.get_Item(1);
if (worksheet == null) {
Console.WriteLine ("ERROR: worksheet == null");
}
Range range1 = worksheet.get_Range("C1", Missing.Value);
if (range1 == null) {
Console.WriteLine ("ERROR: range == null");
}
const int nCells = 1;
Object[] args1 = new Object[1];
args1[0] = nCells;
range1.GetType().InvokeMember("Value", BindingFlags.SetProperty, null,range1, args1);
return 100;
}
}

但是编译这个例子的时候,却报错:
myExcel.cs(4,7): error CS0246: 找不到类型或命名空间名称“Excel”(是否缺少 using 指令或程序集引用?)。

这是为什么?????
...全文
579 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
要你命三千V 2010-06-09
  • 打赏
  • 举报
回复
有没有简单明了的
91bct 2005-01-04
  • 打赏
  • 举报
回复
“首先将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的各种操作函数了。”
》-----------------------

通过上面这段描述,就可以得到Excel.dll,然后添加引用,找到你刚生成的这个dll,添加进来就可以做上述所说的事情了。
BlueLoves 2004-12-31
  • 打赏
  • 举报
回复
对,--找不到类型或命名空间名称“Excel”--
的错误很可能是没有在工程中添加引用造成的。

大家所说的太好了!
我用comningbo(下雨不带伞) 的方法,读写EXCEL都很方便。
西客小贝壳 2004-12-25
  • 打赏
  • 举报
回复
添加引用即可
using Excel;
对Excel我也很头疼
机器人 2004-12-25
  • 打赏
  • 举报
回复
为什么不添加COM组件呢???项目添加引用,Microsoft Excel Object 9.0 ...
mqzzzm 2004-12-23
  • 打赏
  • 举报
回复
工作有了一点点进展,要想让程序识别“Excel”这个类,那么编译的时候,必须指明“Excel”所在的程序集!如下:
在.NET命令行下转移到你的cs程序所在的目录,执行:
csc /r:"Excel.dll所在的绝对路径" 你的程序名

这样程序起码就认识“Excel”这个类了,
但是程序中的如下代码
Application exc = new Application();
if (exc == null) {
Console.WriteLine("ERROR: EXCEL couldn't be started!");
return 0;
}
exc.set_Visible(0, true);

这有错吗?编译时报:
“Excel._Application.Visible.set” : 无法显式调用运算符或访问器

这是为什么????

mqzzzm 2004-12-23
  • 打赏
  • 举报
回复
楼上写的什么啊?看不懂!!
我现在仅仅是想让程序不要报“找不到类型或命名空间名称“Excel”(是否缺少 using 指令或程序集引用?)”这个错误,是不是需要设置环境变量啊????
在文本编辑器中编写C#程序时,如何才能让程序能够认识Excle这个类呢???
机器人 2004-12-23
  • 打赏
  • 举报
回复
Public Class ReportController
Private xlApp As Excel.Application ' EXCEL object
Private xlWorkBook As Excel.Workbook
Private xlWorkSheet As Excel.Worksheet
Private templateFilePath As String
Private macroFilePath As String
Private ExcelIsRunning As Boolean

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
ByVal lpWindowName As String) As Integer


Public Sub New(ByVal fileName As String)
templateFilePath = Environment.CurrentDirectory & "\" & fileName
OpenExcelSheet() ' Call Win32 API FindWindow function which detect whether the Excel application is running ?
'CreateExcelSheet() ' New a Excel Application directly.
End Sub

Protected Overrides Sub Finalize() ' Disconstructor!
If Not (xlApp Is Nothing) Then
xlApp.Quit() ' Although, xlApp quit, there are excel's processes.
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheet) ' Release COM , It is important!
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook)
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
xlWorkSheet = Nothing : xlWorkBook = Nothing : xlApp = Nothing
End If
GC.Collect()
MyBase.Finalize()
End Sub

Private Sub OpenExcelSheet()
Dim hWnd As Integer
hWnd = FindWindow("XLMAIN", Nothing)
If hWnd <> 0 Then ' hWnd <> 0 means Excel is running.
ExcelIsRunning = True
Else
ExcelIsRunning = False
End If

Try
If ExcelIsRunning Then
xlApp = GetObject(, "Excel.Application") ' If Excel is running, get the handle of the application.
Else
xlApp = CreateObject("Excel.Application") ' If Excel isn't running, create a excel's application.
End If
xlApp.WindowState = Excel.XlWindowState.xlMaximized ' Make excel's window maximize.
xlApp.DisplayAlerts = False ' Don't display alerts.
xlApp.Visible = True
xlWorkBook = xlApp.Workbooks.Open(templateFilePath)
Catch err As Exception
MsgBox(err.StackTrace.ToString)
End Try
End Sub
机器人 2004-12-23
  • 打赏
  • 举报
回复
用COM组件阿,同样操作:)
Imports System.Collections
Imports System.IO
Imports Excel
Imports Excel.ApplicationClass
Imports Excel.XlLineStyle
Imports Excel.XlPattern
Imports Excel.XlBorderWeight
Imports Excel.Constants
Imports Excel.XlBordersIndex
Imports Excel.XlInsertShiftDirection
机器人 2004-12-23
  • 打赏
  • 举报
回复
<a href = "http://spaces.msn.com/members/fxlog/">Excel Control in .net</a>
smartsword 2004-12-23
  • 打赏
  • 举报
回复
类名不要与引用的的Excel同名,我比你还惨,我要解析Excel表格
wlss 2004-12-23
  • 打赏
  • 举报
回复
学习,请楼主解决后贴出代码!
qozms 2004-12-23
  • 打赏
  • 举报
回复
学习
mqzzzm 2004-12-23
  • 打赏
  • 举报
回复
我现在已经在Visual C# .NET中将我建的项目的引用下导入了“Excel.dll”,然后呢???
comningbo 2004-12-22
  • 打赏
  • 举报
回复
myOleDbConn=new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+txtFilePath.Text+";Extended Properties=Excel 8.0");
myOleDbConn.Open();
myOleDbDataAdapter = new OleDbDataAdapter("Select * From [Sheet1$]",myOleDbConn);
myOleDbDataAdapter.Fill(myDataSet);
myOleDbConn.Close();
egxsun 2004-12-22
  • 打赏
  • 举报
回复
C#操作Excel表格如果读取数据就用jet方法,不然就要向上面那样引用excel库
cdknet 2004-12-22
  • 打赏
  • 举报
回复
在工程的引用下面加入了excel.dll这个文件没有?
具体内容请参考我的BLOG:http://blog.csdn.net/smallwhiteyt/archive/2009/11/08/4784771.aspx 如果你耐心仔细看完本文,相信以后再遇到导出EXCLE操作的时候你会很顺手觉得SO EASY,主要给新手朋友们看的,老鸟可以直接飘过了,花了一晚上的时间写的很辛苦,如果觉得对你有帮助烦请留言支持一下,我会写更多基础的原创内容来回报大家。 C#导出数据到EXCEL表格是个老生常谈的问题了,写这篇文章主要是给和我一样的新手朋友提供两种导出EXCEL的方法并探讨一下导出的效率问题,本文中的代码直接就可用,其中部分代码参考其他的代码并做了修改,抛砖引玉,希望大家一起探讨,如有不对的地方还请大家多多包涵并指出来,我也是个新手,出错也是难免的。 首先先总结下自己知道的导出EXCEL表格的方法,大致有以下几种,有疏漏的请大家补充。 1.数据逐条逐条的写入EXCEL 2.通过OLEDB把EXCEL做为数据源来写 3.通过RANGE范围写入多行多列内存数据到EXCEL 4.利用系统剪贴板写入EXCEL 好了,我想这些方法已经足够完成我们要实现的功能了,方法不在多,在精,不是么?以上4中方法都可以实现导出EXCEL,方法1为最基础的方法,意思就是效率可能不是太高,当遇到数据量过大时所要付出的时间也是巨大的,后面3种方法都是第一种的衍生,在第一种方法效率低下的基础上改进的,这里主要就是一个效率问题了,当然如果你数据量都很小,我想4种方法就代码量和复杂程度来说第1种基本方法就可以了,或当你的硬件非常牛逼了,那再差的方法也可以高效的完成也没有探讨的实际意义了,呵呵说远了,本文主要是在不考虑硬件或同等硬件条件下单从软件角度出发探讨较好的解决方案。

111,120

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧