==如何遍历EXCEL的Sheet工作表(在线)==

windancer 2003-11-21 10:27:57
想实现用下拉列表把一个Excel文件中的所有工作表名(sheetName)显示出来

当前已经可以用导入 Microsoft Excel 10.0 object library 来实现这个功能
代码如下:
Imports Excel
...
Dim exl As Application = New Excel.Application
Dim sheets As Workbook = exl.Workbooks.Open("D:\test.xls")

Dim shtIndex As Integer
Dim sht As Excel.Worksheet
Dim arrlist As New ArrayList

For Each sht In sheets.Worksheets
arrlist.Add(sht.Name)
Next
sheets.Close()
exl.Quit() '''这里关闭以后文件还是被锁定,why?


但是需要服务端一定要安装office xp软件,而现在无法确定是否所有的服务器都有office软件

想问一下不用对象库连接excel文件是否可以做到这一功能,比如我用了

Dim myOleDbConnection As OleDbConnection = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & p_FilePath & ";Extended Properties=""Excel 8.0;""")

Dim Cmd As OleDbCommand = New OleDbCommand("SELECT * FROM [" & tableName & "$]", myOleDbConnection)'主要原因是这个tableName我想用动态的
==============================================================
如果能够在服务端不安装office软件而能够调用Microsoft Excel 10.0 object library的方法也可以

任何 提示 或者 提供相关链接 均万分感谢并分数奉上.
...全文
648 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuyong_lll 2003-11-21
  • 打赏
  • 举报
回复
public class Util

{

private static Microsoft.Office.Interop.Excel.ApplicationClass oExcel=null;



public static Microsoft.Office.Interop.Excel.ApplicationClass GetOE(){



if (oExcel==null)

oExcel = new Microsoft.Office.Interop.Excel.ApplicationClass();

return oExcel;



}

}



在使用时通过调用Util.GetOE()的方法获得一个Excel.ApplicationClass对象,这样服务器端只会产生一个Excel进程了



不知道对你的问题有没有什么帮助,自己的一些心得..........也希望对你有些帮助的!
liuyong_lll 2003-11-21
  • 打赏
  • 举报
回复
至于你所说的浏览,好像你很清楚吧,application\workbook\worksheet你都很清楚的吧
liuyong_lll 2003-11-21
  • 打赏
  • 举报
回复
能够在服务端不安装office软件而能够调用Microsoft Excel 10.0 object library???????

有点疑问,我觉得你可以判断那个连接是否成功呀,如果成功就采用你自己所说的方法
donwong 2003-11-21
  • 打赏
  • 举报
回复
'生成Excel实例
Lobj_AppExcel = New Excel.Application()

'设置Excel初始状态
Lobj_AppExcel.Visible = False
Lobj_AppExcel.AlertBeforeOverwriting = False
Lobj_AppExcel.AskToUpdateLinks = False
Lobj_AppExcel.DisplayAlerts = False

'打开工作薄
Lobj_ExcelWorkBook = Lobj_AppExcel.Workbooks.Open(strDRptPath + mXltFileName)
Lobj_ExcelWorkBook = Lobj_AppExcel.ActiveWorkbook

'打开Sheet
Lobj_ExcelWorkSheet = Lobj_ExcelWorkBook.Sheets("Sheet1")

'填充表格
PrintHead(dtHead)
PrintDetail(dtDetail)

'显示Excel
Lobj_AppExcel.Visible = True

'删除Excel引用
Lobj_ExcelWorkSheet = Nothing
Lobj_ExcelWorkBook = Nothing
Lobj_AppExcel = Nothing

'垃圾回收
GC.Collect()


----------------------------
sheet.colse()
最好在excel里写宏

windancer 2003-11-21
  • 打赏
  • 举报
回复
up!
windancer 2003-11-21
  • 打赏
  • 举报
回复
楼上是指excel文件锁定的问题吧,谢谢,先去试试
leoAAAA 2003-11-21
  • 打赏
  • 举报
回复
System.Runtime.InteropServices.Marshal.ReleaseComObject(object);
leoAAAA 2003-11-21
  • 打赏
  • 举报
回复
dispose?
windancer 2003-11-21
  • 打赏
  • 举报
回复
好,基本了解了,揭贴
windancer 2003-11-21
  • 打赏
  • 举报
回复
可是即使把Microsoft Excel 10.0 object library库从vs.net导入,本地调试通过,如果拿到没有装office xp的机器上还是无法运行,/bin/文件夹里已经有Interop.Excel.dll了啊?!
littlechang 2003-11-21
  • 打赏
  • 举报
回复
好象可以把excel库导入.net
windancer 2003-11-21
  • 打赏
  • 举报
回复
我就是我现在的问题
|

windancer 2003-11-21
  • 打赏
  • 举报
回复
我想用ado.net连接excel,比如用oledb连接,我上面用到了,但是无法列出里面的所有工作表,我就是我现在的问题
windancer 2003-11-21
  • 打赏
  • 举报
回复
谢谢楼上各位的热心帮助
我说的
"能够在服务端不安装office软件而能够调用Microsoft Excel 10.0 object library"
意思就是不用完全安装整个office,比如只安装需要的组件就可以,这样可以减少对服务器的要求。我希望是不要每个服务器在安装软件以前都必须先安装office xp。或者说有没有只安装office对象库的安装包
我尝试过手工注册office对象库,可是也没有成功

感谢各位解答

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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