用PageOffice實現C#ASP.NET批量轉換導出Word文檔


在某些涉及到報表的項目開發中,可能經常會遇到需要批量的生成某些文檔的操作,這些文檔若是要點擊一下,生成一個的話,就太浪費時間了。但若用FileMakerCtrl控件來實現的話就簡單容易的多了。

下面我就以批量轉換10Word文檔爲例來分享一下FileMakerCtrl控件的使用方法。

第一步:請先安裝PageOffice的服務器端的安裝程序,之後在你的網站或項目的根目錄下添加pageoffice文件夾(在PageOffice官方網站的“下載中心”中可下載相應的壓縮包,解壓之後直接將PageOffice實例代碼裏的pageoffice文件夾拷貝到根目錄下就可以了)。

第二步:在網站或項目中添加文件夾存放word模板文件,我習慣命名爲“doc”,將要打開的文件拷貝到該文件夾下,我要轉換的文件爲“template.doc”,該文件中有一個書籤,名稱爲“PO_company”。

第三步:在網站或項目中創建動態頁面FileMaker.aspx。在工具箱中拖動一個FileMakerCtrl控件到頁面上(FileMakerCtrl控件位於工具箱最下方)。

FileMaker.aspx.cs後臺頁面中,添加代碼如下:

//設置服務器頁面

FileMakerCtrl1.ServerPage= "pageoffice/server.aspx";

string id = Request.QueryString["id"];

if (id != null&&id.Length > 0)

   {

PageOffice.WordWriter.WordDocument doc = newPageOffice.WordWriter.WordDocument();

//禁用右擊事件

       doc.DisableWindowRightClick = true;

//給數據區域賦值,即把數據填充到模板中相應的位置

       doc.OpenDataRegion("PO_company").Value = "北京卓正志遠軟件有限公司  " + id;

//設置保存頁面

       FileMakerCtrl1.SaveFilePage = "Savemaker.aspx?id=" + id;

       FileMakerCtrl1.SetWriter(doc);

//設置轉換完成後執行的JS函數

      FileMakerCtrl1.JsFunction_OnProgressComplete = "OnProgressComplete()";

//打開文檔

          FileMakerCtrl1.FillDocument(Server.MapPath("doc/template.doc"),PageOffice.DocumentOpenType.Word);

}

在前臺添加JS函數OnProgressComplete()如下:

function OnProgressComplete() {

       window.parent.myFunc(); //調用父頁面(Default.aspx)js函數

}

第四步:在網站或項目中創建動態頁面SaveMaker.aspx,保存轉換後的Word文檔到本地磁盤上,部分代碼如下:

//定義FileSaver對象

   PageOffice.FileSaverfs = new PageOffice.FileSaver();

string fileName = "maker"+ id + fs.FileExtName;

//Word文檔保存到本地磁盤上

   fs.SaveToFile(Server.MapPath("doc/") + fileName);

fs.Close();

第五步:在網站或項目中創建動態頁面Default.aspx。先在頁面中嵌套一個<iframe>標籤:<iframeid="iframe1"name="iframe1"src=""></iframe>。再在頁面中添加一個非服務器端按鈕,給其添加一個onclick事件,執行JS函數“ConvertFiles()”。最後在頁面中添加一個層,用來作爲進度條顯示文檔的轉換進度。部分的Html代碼如下:

<!--顯示進度條-->

<divid="ProgressBarSide"style="color: Silver;width: 200px; visibility: hidden;position: absolute; text-align: center; left: 40%; top: 50%; margin-top: -32px">

<spanstyle="color: gray; font-size: 12px; text-align: center;">正在轉換請稍後...</span><br/>

<divid="ProgressBar"style="background-color: Green;height: 16px; width: 0%; border-width: 1px;

border-style: Solid;">

</div>

</div>

<!--轉換按鈕-->

<inputid="Button1"type="button"value="批量轉換Word文件"onclick="ConvertFiles()"/>

<!—嵌套的iframe-->

<divstyle="width: 0px;height: 0px; overflow: hidden;">

<iframeid="iframe1"name="iframe1"src=""></iframe>

</div>

顯示進度條的JS函數myFunc()和開始執行轉換文檔的JS函數ConvertFiles()如下:

count = 0;//定義轉換文件的個數

//顯示進度條

   window.myFunc = function(){

   count++;

if (count < 10) {

      document.frames["iframe1"].window.location.href= "FileMaker.aspx?id=" + count;

//設置進度條

   document.getElementById("ProgressBarSide").style.visibility = "visible";

   document.getElementById("ProgressBar").style.width = count + "0%";

} else {

//隱藏進度條div

document.getElementById("ProgressBarSide").style.visibility = "hidden";

       count = 0;

//重置進度條

       document.getElementById("ProgressBar").style.width = "0%";

       document.getElementById("aDiv").style.display = "";

       alert('批量轉換完畢!');

}

};


//開始轉換文檔

function ConvertFiles() {

//第一次讓子頁面自刷新

   document.frames["iframe1"].window.location.href= "FileMaker.aspx?id=" + count;

}

綜上所述,FileMakerCtrl控件使得10Word文檔很簡單的就轉換完成了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章