在 ASPNET 中进行 EXCEL 开发Word文档格式.docx

上传人:b****3 文档编号:16768536 上传时间:2022-11-25 格式:DOCX 页数:7 大小:19.35KB
下载 相关 举报
在 ASPNET 中进行 EXCEL 开发Word文档格式.docx_第1页
第1页 / 共7页
在 ASPNET 中进行 EXCEL 开发Word文档格式.docx_第2页
第2页 / 共7页
在 ASPNET 中进行 EXCEL 开发Word文档格式.docx_第3页
第3页 / 共7页
在 ASPNET 中进行 EXCEL 开发Word文档格式.docx_第4页
第4页 / 共7页
在 ASPNET 中进行 EXCEL 开发Word文档格式.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

在 ASPNET 中进行 EXCEL 开发Word文档格式.docx

《在 ASPNET 中进行 EXCEL 开发Word文档格式.docx》由会员分享,可在线阅读,更多相关《在 ASPNET 中进行 EXCEL 开发Word文档格式.docx(7页珍藏版)》请在冰豆网上搜索。

在 ASPNET 中进行 EXCEL 开发Word文档格式.docx

在这里,请确认一下你的操作系统和Office的版本,包括补丁的版本。

虽然在绝大多数情况下Windows2000/WindowsXP、Office2000/OfficeXP的任意组合都能正常工作,但也确实存在同样的代码在仅仅是SP版本不同的两台机器上一个执行正常,而另一个却出现异常的情况。

所以,强烈建议使用与服务器环境完全一致的开发环境。

配置DCOM

对Excel进行编程,实际上就是通过.NetFramework去调用Excel的COM组件,所有要在Web环境下调用COM组件的时候,都需要对其进行相应的配置。

很多朋友都反映在Windows环境下调试正常的程序,一拿到Web环境中就出错,实际上就是因为缺少了这一步。

下面就详细介绍DCOM的配置过程。

1、运行“dcomcnfg”,打开DCOM配置程序。

2、在应用程序列表中找到“MicrosoftExcel应用程序”,点击“属性”。

3、将“常规”选项卡中的“身份验证级别”设为“无”。

4、选中“安全性”选项卡中的“使用自定义配置权限”,点击“编辑”。

5、在打开的对话框中添加“Internet来宾用户”(通常是IUSR_机器名),访问类型设为“完全控制”。

6、将“身份标识”选项卡中的用户设为“交互式用户”。

7、点击“应用”之后,关闭属性页和DCOM配置程序。

配置完成。

这里只给出了DCOM的配置方法,关于为什么要这么配置,以及更多的关于DCOM的知识就不属于这篇文章的讨论范围了,有兴趣的朋友可以自己去查阅相关资料。

在ASP.NET中进行EXCEL编程

相信99%的阅读本文的朋友,对关于如何引用Excel对象已经是非常熟悉了的。

但是为了保证这篇文章的完整性,就让我再对剩下的1%的朋友再多罗嗦几句。

打开VS.NET,创建一个Web应用程序,点击“项目”菜单中的“添加引用”,在打开的对话框的“COM”选项卡中找到“MicrosoftExcel10.0ObjectLibrary”,将其添加到项目中。

10.0的版本号表示这是OfficeXP,同样的9.0是Office2000,11.0是Office2003,这取决于你所安装的Office。

在我们正式开始编程之前,还有2件事要做。

第一件,在web.config文件的节中,加入以下这条:

&

lt;

identityimpersonate="

true"

/&

gt;

第二件,确认一下“ASPNET”用户是否对你将要操作的Excel文件的所在目录拥有读写权限。

比如,我的Web项目是在默认的“C:

/Inetpub/wwwroot”目录中,但我要读写的Excel文件却放在“D:

/TEMP”中,那么你就要在“D:

/TEMP”的安全属性中加入“ASPNET”用户,并赋予相应的权限。

至此,执行Excel所需要的所有配置都已完成。

在即将开始的ASP.NET编程中,我将使用VB.NET语言,这可能会让C#的拥护者们感到失望,但我相信在省去了大量的Missing和类型转换之后,你可以更清晰的看到在程序中是如何控制Excel的。

其实,我也只有在对Excel进行编程的时候才用VB.NET的:

)。

本文的示例在最后完成的时候,将输出下面这样的结果:

为了更清楚的理解Excel编程的结构,我们先简单的输出一下标题部分,代码如下:

DimfilePathAsStringfilePath=Server.MapPath("

testFile.xls"

)DimxlAppAsExcel.Application

DimxlBookAsExcel.Workbook

DimxlSheetAsExcel.Worksheet

DimxlRangeAsExcel.RangeTryxlApp=NewExcel.Application'

'

不显示Excel窗口,自动释放,不显示提示信息

xlApp.Visible=False

xlApp.UserControl=False

xlApp.DisplayAlerts=False'

打开一个作为输出模板的文件

'

xlBook=xlApp.Workbooks.Open(filePath)

或是新建一个文件

xlBook=xlApp.Workbooks.Add()'

选择当前的Sheet

【注意】索引的下标是从1开始的,而不是0

xlSheet=xlBook.Sheets

(1)DimstrTitleAsString

DimstrPosAsStringstrTitle="

大航海时代4补给港口列表"

选择单元格

strPos="

A1:

F1"

xlRange=xlSheet.Range(strPos)'

设置单元格内容

xlRange.Formula=strTitle'

字体:

18号,粗体

xlRange.Font.Size=18

xlRange.Font.Bold=True'

合并单元格

xlRange.MergeCells=True'

设置背景色

使用内置的颜色

xlRange.Interior.ColorIndex=40

或者直接设置RGB颜色

xlRange.Interior.Color=RGB(255,204,153)'

设置居中

xlRange.HorizontalAlignment=Excel.XlHAlign.xlHAlignCenter'

设置行高

xlRange.RowHeight=25'

保存打开的文件

xlBook.Save()

保存新建的文件

xlBook.SaveAs(filePath)CatchexAsException

Throwex

Finally'

释放对象资源

ReleaseComObject(xlRange)

ReleaseComObject(xlSheet)IfNotxlBookIsNothingThen

xlBook.Close()

ReleaseComObject(xlBook)

EndIfIfNotxlAppIsNothingThen

xlApp.Quit()

ReleaseComObject(xlApp)

EndIf'

强制回收内存

GC.Collect()

EndTry

其中的ReleaseComObject方法:

SubReleaseComObject()SubReleaseComObject(ByValobjAsObject)

IfNotobjIsNothingThen

System.Runtime.InteropServices.Marshal.ReleaseComObject(obj)

obj=Nothing

EndIf

EndSub

将这段代码放到你的项目中,执行之后,你就会在Web项目的目录中找到输出的“testFile.xls”文件。

现在,我们将整个过程的关键部分提出来,就简化为下面这样的结构:

[定义Excel对象]Try[使用Excel对象]CatchexAsException

Finally[释放Excel对象][强制回收内存]EndTry

这种结构是保证Excel进程可以被正确释放的关键,也就是说,你必须保证所有使用过的Excel对象都被释放了。

为了让你对这种结构有更清楚的认识,我们将上面的代码按照不同的级别重新整理一下。

这样我们就可以更清楚的看到,释放对象的原则就是:

在本函数中定义并使用的Excel对象,一定要在本函数中释放。

整理过的代码如下所示:

SubExportExcel()SubExportExcel(ByValfilePathAsString)DimxlAppAsExcel.Application

DimxlBookAsExcel.WorkbookTry

xlApp=NewExcel.Application'

xlBook=xlApp.Workbooks.Add()FillSheet(xlBook,1)'

xlBook.SaveAs(filePath)

CatchexAsException

Finally'

IfNotxlBookIsNothingThen

EndTry

EndSubSubFillSheet()SubFillSheet(ByValxlBookAsExcel.Workbook,ByValindexAsInteger)DimxlSheetAsExcel.WorksheetTryxlSheet=xlBook.Sheets(index)SetTitle(xlSheet)CatchexAsException

Finally

ReleaseComObject(xlSheet)

EndSubSubSetTitle()SubSetTitle(ByValxlSheetAsExcel.Worksheet)DimxlRangeAsExcel.Range

DimxlFontAsExcel.FontTryDimstrTitleAsString

xlFont=xlRange.Font

xlFont.Size=18

xlFont.Bold=True'

xlRange.RowHeight=25CatchexAsException

FinallyReleaseComObject(xlFont)

EndTryEndSub

值得注意的一个地方是,在SetTitle函数中,我们又定义了一个Excel.Font对象,对字体的设置通过这个对象来完成,并且在执行后释放掉。

在通常情况下,我们不需要使用这么麻烦的方法,但在某些时候,如果不释放这些间接引用的对象(比如xlRange.Font.Size中的Font对象)的话,就无法正常中止Excel进程。

如果我们非常不幸的遇到了这种情况的时候,就需要仔细检查代码,保证不存在间接引用(简单的说就是没有使用两个“.”同时出现的代码)。

关于如何设置单元格,其实并没有什么值得说的,基本上所有的问题都可以通过在Excel中录制宏来解决。

此外,当你还希望了解更多的关于Excel对象的信息的时候,可以去看Excel的VBA参考手册,在我的机器上,它位于“F:

/ProgramFiles/MicrosoftOffice/Office10/2052/VBAXL10.chm”。

如果你在你的机器上没有找到这个文件,那就需要添加安装Office安装选项中“Office共享功能”下面的“VisualBasicforApplictions”组件中的“VisualBasic帮助”。

优化EXCEL的执行效率

通过前面的介绍,我们已经可以在ASP.NET中进行Excel开发了,但如果是要进行企业级的开发的话,我们就必须考虑一下效率的问题了。

这是因为:

1、每当一个用户提交请求时,Web服务器上都需要创建一个Excel进程,每个进程都会占用大量的内存,少则几M多则20~30M。

2、每次对Excel单元格的写操作都是非常花时间的,高达几十ms(测试机为P43.0,1G内存)。

在我曾经参加过的一个项目中,输出的一个Excel文件里,最多要有8个Sheet。

最大的一个Sheet中,每条记录要占20行197列,整个模版文件就2M多。

在优化之前,输出这样一个文件大概要40分钟(测试人员掐表算的,我没敢试-_-!

!

)。

对Excel的操作程序进行优化的原则非常简单,就是

1、在一次操作中尽可能做更多的事。

2、不需要做的事情不做。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1