我写了一个在asp.net中启动和调用excel的程序,并按照本论坛的贴子中的作法设置了dcomcnfg,它在我编程及调试用的机器里能够正常启动,而在客户端执行时excel没有在客户端启动,却在服务器端启动了。这是为什么?我一直想像的是应该在客户端启动的!希望各位古道热肠的大虾指点在下一二,本人不胜感激!有高分相送。
还有两个问题也是与本问题有关:
1、用tlbimp产生的三个文件是否就放在c:\根目录上?
2、需要访问的客户是否都要这样做?
如果你想在客户端启动,你只能使用script
以下是vbscript的例子
Dim xlApp,xlBook,XlSheet
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.add
Set XlSheet = xlBook.Worksheets(1)
xlApp.Caption="test表"
XlSheet.name = "test表"
XlSheet.Rows("1:1").RowHeight = 36.6
XlSheet.Range("A1").FormulaR1C1 = "test"
XlSheet.Range("A1").Font.Bold = True
XlSheet.Range("A1").Font.ColorIndex = 3
XlSheet.Range("A1").Font.Size = 16
xlApp.Visible=true
set xlApp = nothing
set xlBook= nothing
set xlSheet = nothing
经过服务器和客户端的验证,绝对正确!实行三包!
解决思路:因此种调用方式实际为调用服务端的Excel,故我们生成xls文件放置于服务器上,然后在客户端予以打开。
相信国外的www.dbnetgrid.com的dbgrid控件生成Excel和Word文件也是采用此种方式。
Excel.Application oExcel;
Excel.Workbook oBook;
Object oMissing = System.Reflection.Missing.Value;
oExcel = new Excel.Application();
oBook = oExcel.Workbooks.Add(oMissing);
for (int i=1;i<=4;i++)
{
oExcel.Cells[i,1]=i.ToString();
oExcel.Cells[i,2]="bbb2";
oExcel.Cells[i,3]="ccc3";
oExcel.Cells[i,4]="aaa4";
}
oBook.Saved = true;
oExcel.UserControl = false;
string mm=Server.MapPath(".")+"\\aa.xls";//服务器保存地址
oExcel.ActiveWorkbook.SaveCopyAs (mm);
oExcel.Quit();
Response.Redirect ("aa.xls");//注意上保存和调用时的路径。当然实际的做法是另开一个窗口显示,在这里我只是做个实验而已。