通过dsoframer Activex插件使用javascript编辑Excel文档

<!DOCTYPE html>
<html charset="utf-8">
<head>
<title>dsoframer</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<style type="text/css">
.oobject {
 position: relative;
 left: 360px;
 top: 10px;
 right: 0px;
 bottom: 0px;
 width: 960px;
 height: 600px;
 z-index: 5;
 border: 1px solid blue;
}
.dialog {
 position: absolute;
 left: 200px;
 top: 200px;
 width: 400px;
 height: 400px;
 background-color: red;
 z-index: 7;
 border: 3px solid green;
}
.test {
 position: absolute;
 left: 5px;
 top: 5px;
 right: 5px;
 bottom: 5px;
 border: 3px solid black;
 z-index: 6;
}
</style>
</head>
<body>
 <div class="oobject">
  <div class="test">
   <object classid="clsid:00460182-9E5E-11d5-B7C8-B8269041DD57"
    id="oframe" width="100%" height="100%"
    codebase="ActiveX/DSOframer/DSOframer.CAB#version=1,0,0,0">
    <param name="BorderStyle" value="1" />
    <param name="TitlebarColor" value="52479" />
    <param name="TitlebarTextColor" value="0" />
    <param name="Menubar" value="1" />
    <param name="Titlebar" value="0" />
    <param name="Menubar" value="0" />
    <param name="wmode" value="transparent" />
    <embed wmode="opaque"></embed>
   </object>
  </div>
  <div class="dialog">test</div>
 </div>
 <input type="checkbox" id="showgrid" checked="checked">显示网格</input>
 <form action="/activex/send" method="post" enctype="multipart/form-data">
  <input type="file" name="fileuploadtest"
   accept="application/vnd.ms-excel,application/vnd.openxmlformats-officedocument.spreadsheetml.sheet">
  </file>
  <input type="submit" value="上传"></input>
 </form>
 <select id="args">
  <option value="10">加载文件测试</option>
  <option value="20">获取sheet测试</option>
  <option value="30">保存文件测试</option>
  <option value="40">切换冻结首行首列</option>
  <option value="50">切换外边框</option>
  <option value="60">切换内边框</option>
  <option value="70">导入外部文件工作表</option>
  <option value="100">关闭文档</option>
 </select>
 <input type="button" id="test" value="点击测试"></input>
 <input type="button" id="local" value="打开本地文件"></input>
 <SCRIPT LANGUAGE=“JScriptlanguage” FOR="oframe" EVENT="OnDocActivated">
  alert("event occured!");
 </SCRIPT>
 <script type="text/javascript">
  var application = document.getElementById("oframe");
  document.getElementById("local").addEventListener("click", openLocal);
  function openLocal() {
   application.showdialog(1);
  }
  document.getElementById("showgrid").addEventListener("click",function(){
   var grid = document.getElementById("showgrid");
   if (grid.checked) {
    application.GetApplication.activewindow.DisplayGridlines = true;
   } else {
    application.GetApplication.activewindow.DisplayGridlines = false;
   }
  });
  var isOpened = false;
  document.getElementById("test").addEventListener("click", function() {
   var param = document.getElementById("args").value
   if (param == 10) {
    openRemoteFile(application);
   } else if (param == 20) {
    getSheetInfo(application);
   } else if (param == 30) {
    uploadToServer(application);
   } else if (param == 40) {
    switchFreeze(application);
   } else if (param == 50) {
    switchOutterBorder(application);
   } else if (param == 60) {
    switchInnerBorder(application);
   } else if (param == 70) {
    insertFile(application);
   } else if (param == 100) {
    close(application);
   }
  });
  function openRemoteFile(app) {
   app.open("/get?filename=a.xls", false, "Excel.sheet");
   isOpened = true;
  }
  function getSheetInfo(app) {
   if (!isOpened)
    return;
   var sheet = app.GetApplication.activesheet;
   var result = app.GetApplication.worksheets.item(1);
   sheet.name = "修改sheet名字" + sheet.index;
   result.range("A10") = sheet.name;
   result.range("B10") = sheet.index;
  }
  function uploadToServer(app) {
   app.HttpInit();
   app.HttpAddPostString("takesite", "null");//需要设置,可随意指定key和value
   app.HttpAddPostCurrFile("filename", "dsoframertest.xls");//文件名需要设置,两者少一个服务端接收到的数据就有问题
   var ret = app.HttpPost("/send");
   if (ret == "true") {
    alert("success");
   } else {
    alert("failed " + ret);
   }
  }
  function switchFreeze(app) {
   var aw = app.GetApplication.activewindow;
   if (aw.freezepanes) {
    aw.freezepanes = false;
    aw.split = false;
   } else {
    aw.splitrow = 1;
    aw.splitcolumn = 1;
    aw.freezepanes = true;
   }
  }
  function switchOutterBorder(app) {
   var border = app.GetApplication.selection.borders;
   if (border.linestyle != -4142) {
    border(1).linestyle = -4142;
    border(2).linestyle = -4142;
    border(3).linestyle = -4142;
    border(4).linestyle = -4142;
    border(11).linestyle = -4142;
    border(12).linestyle = -4142;
   } else {
    border(1).linestyle = 1;
    border(2).linestyle = 1;
    border(3).linestyle = 1;
    border(4).linestyle = 1;
    border(11).linestyle = -4142;
    border(12).linestyle = -4142;
   }
  }
  function switchInnerBorder(app) {
   var border = app.GetApplication.selection.borders;
   if (border(11).linestyle == -4142) {
    border(11).linestyle = 1;
    border(12).linestyle = 1;
   } else {
    border(11).linestyle = -4142;
    border(12).linestyle = -4142;
   }
  }
  function insertFile(app) {
   app.insertFile('http://localhost:8080/activex/get?filename=c.xls',
     app.GetApplication.activesheet.index);
  }
  function close(app) {
   app.close();
   isOpened = false;
  }
 </script>
</body>
</html>

最重要的变量就是通过object标签获取到的application.GetApplication对象,和excel相关的操作基本都要通过该对象完成。

若要进行其他的操作,可以通过excel的宏录制功能获取相应操作的vba代码,并对应该为javascript的实现。

你可能感兴趣的:(通过dsoframer Activex插件使用javascript编辑Excel文档)