需求 : 最近要实现一个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 , 把所有工具条都隐藏。
打开在线文档
FramerControl1.DownloadFile(url,"C:\\temp\\"+record.getValue("clientFilename")); //先下载到本地
FramerControl1.Open("C:\\temp\\"+record.getValue("clientFilename"), false,"Excel.Sheet"); // 再打开本地文档
本来想直接 用 FramerControl1.Open(url, false,"Excel.Sheet");
但是会弹出
暂时不知道如果解决 ,只好这样写了。
保存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();