需求 : 最近要實現一個Excel 在線編輯的功能 ,所以使用 Dsoframer 控件 。
版本 : 網上暫時可以找到的可用于office 2007以上并且包含源碼而且比較干凈的版本是2.3.0.1.
安裝 : 寫了個安裝和卸載腳本 ,方便用戶安裝 ,其實也只有一句話而已
安裝:
regsvr32 dsoframer.ocx
卸載:
regsvr32 /u dsoframer.ocx
調用方法 :
頁面代碼:
<OBJECT classid="clsid:00460182-9E5E-11D5-B7C8-B8269041DD57" id="FramerControl1" style="LEFT:0px; TOP:0px; WIDTH:100%; HEIGHT:100%" CodeBase="dsoframer.ocx#version=2,3,0,1">
<PARAM NAME="_ExtentX" VALUE="6350">
<PARAM NAME="_ExtentY" VALUE="6350">
<PARAM NAME="BorderColor" VALUE="-2147483632">
<PARAM NAME="BackColor" VALUE="-2147483643">
<PARAM NAME="ForeColor" VALUE="-2147483640">
<PARAM NAME="TitlebarColor" VALUE="-2147483635">
<PARAM NAME="TitlebarTextColor" VALUE="-2147483634">
<PARAM NAME="BorderStyle" VALUE="1">
<PARAM NAME="Titlebar" VALUE="0">
<PARAM NAME="Toolbars" VALUE="0">
<PARAM NAME="Menubar" VALUE="0">
</OBJECT>
Titlebar ,Toolbars ,Menubar 全都設為 0 , 把所有工具條都隱藏。
![](/files/bbs/upload/2013122225713734.jpg)
打開在線文檔
FramerControl1.DownloadFile(url,"C:\\temp\\"+record.getValue("clientFilename")); //先下載到本地
FramerControl1.Open("C:\\temp\\"+record.getValue("clientFilename"), false,"Excel.Sheet"); // 再打開本地文檔
本來想直接 用 FramerControl1.Open(url, false,"Excel.Sheet");
但是會彈出
![](/files/bbs/upload/2013122225713580.jpg)
暫時不知道如果解決 ,只好這樣寫了。
保存Excel數據 : 要保存到數據庫
FramerControl1.HttpInit();
FramerControl1.HttpAddPostCurrFile("FileData", record.getValue("clientFilename"));
FramerControl1.HttpPost("<%=basePath%>servlet/UploadTaskDataServlet?id=<%=request.getParameter("bizId") %>");
Servlet 用SmartUpload (我也想用 CommonUpload , 但是原來是這樣寫 的 ,懶得去加jar包)
SmartUpload mySmartUpload = new SmartUpload();
try {
mySmartUpload.initialize(config, request, response); // Initialization
mySmartUpload.upload();// Upload
SmartFiles files = mySmartUpload.getFiles();
if (files != null && files.getCount() > 0) {
for (int i = 0, s = files.getCount(); i < s; i++) {
//取得上傳文件
SmartFile myFile = mySmartUpload.getFiles().getFile(i);// Retreive
// the
// current
// file
// Save it only if this file exists
if (!myFile.isMissing()) {
String path = request.getSession().getServletContext().getRealPath("/")+ "export/";
myFile.saveAs(path + myFile.getFileName());
.....................
編輯窗口關閉時關閉Excel進程 : FramerControl1.Close();