代码改变世界

Javascript在客户端导出multi-sheet excel

2008-04-01 10:16  zhangz  阅读(922)  评论(0编辑  收藏  举报

客户要求能导出多sheet的excel,这样就不用人工combine了。google一下,找到了一些solution。最后用了ActiveXObject的方案。原理是先把数据存在table里,再把table的数据装入excel。
要在Internet Options里把SecurityCustom level的Initialize and script ActiveX controls not marked as safe for scripting设为Prompt/Enable。
同时客户端要装excel:)    

function ExportToExcel()
      
{
            
var sHTML1,sHTML2,sHTML3,sHTML4,sHTML5,sHTML6,sHTML7,oExcel,oBook;
            sHTML1 
= document.all("TableSummary").outerHTML;
            sHTML2 
= document.all("TableToBeSubmitted").outerHTML;
            sHTML3 
= document.all("TableToBeCosted").outerHTML;
            sHTML4 
= document.all("TableToBeQuoted").outerHTML;
            sHTML5 
= document.all("TableToBeApproved").outerHTML;
            sHTML6 
= document.all("TableToBeSent").outerHTML;
            sHTML7 
= document.all("TableToBeDispositioned").outerHTML;
            
//Open excel application
             oExcel = new ActiveXObject("Excel.Application");
            
//the excel opened has already 3 sheets by default 
             oBook1 = oExcel.Workbooks.Add();
             
//Add 4 more sheets 
             oBook1.Worksheets.Add();
             oBook1.Worksheets.Add();
             oBook1.Worksheets.Add();
             oBook1.Worksheets.Add();
             
//Assign sheets to variables
             var sheet1,sheet2,sheet3,sheet4,sheet5,sheet6,sheet7;
             sheet1 
= oBook1.Worksheets(1);
             sheet2 
= oBook1.Worksheets(2);
             sheet3 
= oBook1.Worksheets(3);
             sheet4 
= oBook1.Worksheets(4);
             sheet5 
= oBook1.Worksheets(5);
             sheet6 
= oBook1.Worksheets(6);
             sheet7 
= oBook1.Worksheets(7);
             
//Set sheet name
             sheet1.Name = "Summary";
             sheet2.Name 
= "ToBeSubmitted";
             sheet3.Name 
= "ToBeCosted";
             sheet4.Name 
= "ToBeQuoted";
             sheet5.Name 
= "ToBeApproved";
             sheet6.Name 
= "ToBeSent";
             sheet7.Name 
= "ToBeDispositioned";
             
//Set content for each sheet
             oBook1.HTMLProject.HTMLProjectItems(3).Text = sHTML1;
             oBook1.HTMLProject.HTMLProjectItems(
4).Text = sHTML2;
             oBook1.HTMLProject.HTMLProjectItems(
5).Text = sHTML3;
             oBook1.HTMLProject.HTMLProjectItems(
6).Text = sHTML4;
             oBook1.HTMLProject.HTMLProjectItems(
7).Text = sHTML5;
             oBook1.HTMLProject.HTMLProjectItems(
8).Text = sHTML6;
             oBook1.HTMLProject.HTMLProjectItems(
9).Text = sHTML7;
             oBook1.HTMLProject.RefreshDocument();
             oExcel.Visible 
= true;
             oExcel.UserControl 
= true;
             
//optional,prompt to ask save when quit
             ////oExcel.ActiveWorkbook.SaveAs("C:\\TEST.XLS");
             //quit excel app 
             //oExcel.Application.Quit();
             //Close the excel.exe process 
             oExcel = null;  
      }