acerbic coffee
走自己的路,让别人跑步
posts - 26,comments - 14,trackbacks - 0
web中,如何读取客户端Word内容并且显示在页面中?

  我发现有2种方法,一种是直接在客户端操作,一种是把客户端的word上传到服务器端操作,这2种各有优缺点。

  我现就举出客户端操作的例子

  首先在.aspx中添加如下js代码

<script language='javascript'>

//默认word转化文件放于C:\\下
var os__localPath = "C:\\";
//保存的文件名
var os__localFile = "defaultFileWord.htm";
var os__xmlDom = new ActiveXObject("MSXML2.DOMDocument");
var os__xmlFSO ;

//保存数据到当前客户端(可以传入一个要保存的文件名).
function os_SaveToLocal()
{
var _saveAs = "";
if(arguments.length > 0)
_saveAs = arguments[0] + "";
else
_saveAs = os__localFile;

try
{
if(os__xmlFSO == null)
os__xmlFSO = new ActiveXObject("Scripting.FileSystemObject");

}
catch(e){window.alert(e);}
}

//Word转化为Html文件
function WorcChangeHtml()
{
var os_xmlFSO;
//获得上传控件对象
var objUpFile = window.document.Form1.updFile;
//获得客户端Word文件路径和文件
var UpFileValue = window.document.Form1.updFile.value;
if(os__xmlFSO == null)
os__xmlFSO = new ActiveXObject("Scripting.FileSystemObject");

try
{
if(window.document.Form1.updFile.value == "")
{
alert('请选择对应的Word文件');
objUpFile.focus();
}
else if(UpFileValue.indexOf(".doc") == -1)
{
alert('您选择的不是Word文件 \r\n请选择正确的Word文件');
objUpFile.focus();
}
else if(!os__xmlFSO.FileExists(objUpFile.value))
{
alert('对应的Word文件不存在');
objUpFile.focus();
}
else
{
var wdFormatHTML = 8;
var objWord = new ActiveXObject("Word.Application");
objWord.Application.Visible = false;
var objDoc = objWord.Documents.Open(UpFileValue);
objDoc.SaveAs(os__localPath+os__localFile, wdFormatHTML);
window.document.Form1.updFile.value = "";
objDoc.Close();
objWord.Quit();
var GetHtml = GetLine();
var iBeginIndex = GetHtml.indexOf("<body");
var iEndIndex = GetHtml.lastIndexOf("</body>");


GetHtml = GetHtml.substring(iBeginIndex,iEndIndex+7).replace("<body","<div");
GetHtml = GetHtml.replace("</body>","</div>");
//将转化后的值赋给页面控件txtIdea的值,我为了将Word值保存进数据库所以用<input type = "hidden" ..... 如果将Word内容显示可以考虑 window.document.Form1."你的显示控件ID".innerText = GetHtml;
window.document.Form1.txtIdea.value = GetHtml;
}
}
catch(e){window.alert(e);}
}

//读取文本文件
function GetLine()
{
var fso, txtfile, strValue;
var ForReading = 1, ForWriting = 2;
fso = new ActiveXObject("Scripting.FileSystemObject");
txtfile = fso.OpenTextFile(os__localPath+os__localFile, ForReading);
while(!txtfile.AtEndOfStream)
{
strValue = strValue + txtfile.ReadLine();
}
txtfile.Close();
return(strValue);
}

</script>

  注意页面上需要添加以下2个控件和对应的客户端事件

<input id="updFile" type="file" style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; BORDER-LEFT: 1px solid; WIDTH: 77.46%; BORDER-BOTTOM: 1px solid; HEIGHT: 26px"
size="71"> <input style="BORDER-RIGHT: #999999 1px solid; BORDER-TOP: #999999 1px solid; FONT-SIZE: 15pt; BORDER-LEFT: #999999 1px solid; WIDTH: 103px; BORDER-BOTTOM: #999999 1px solid; HEIGHT: 28px"
onclick="WorcChangeHtml()" runat="server" id="btnUpLoad" type="submit" value="导入" name="btnUpLoad">
<textarea style="WIDTH: 15.25%; HEIGHT: 23px" rows="50" cols="16" id="txtIdea"
runat="server">

  其中txtIdea中的值就是客户端Word中的内容了,注意:需要调整IE的安全性设置,否则将无效

添加评论
单击隐藏此项的评论。
6月21日

CSS中expression使用简介

IE5及其以后版本支持在CSS中使用expression,用来把CSS属性和Javas cript表达式关联起来,这里的CSS属性可以是元素固有的属性,也可以是自定义属性。就是说CSS属性后面可以是一段Javas cript表达式,CSS属性的值等于Javas cript表达式计算的结果。 在表达式中可以直接引用元素自身的属性和方法,也可以使用其他浏览器对象。这个表达式就好像是在这个元素的一个成员函数中一样。

  给元素固有属性赋值

  例如,你可以依照浏览器的大小来安置一个元素的位置。

#myDiv {
position: absolute;
width: 100px;
height: 100px;
left: expression(document.body.offsetWidth - 110 "px");
top: expression(document.body.offsetHeight - 110 "px");
background: red;
}

  给元素自定义属性赋值

  例如,消除页面上的链接虚线框。 通常的做法是:

<a href="link1.htm" onfocus="this.blur()">link1</a>
<a href="link2.htm" onfocus="this.blur()">link2</a>
<a href="link3.htm" onfocus="this.blur()">link3</a>

  粗看或许还体现不出采用expression的优势,但如果你的页面上有几十甚至上百个链接,这时的你难道还会机械式地Ctrl C,Ctrl V么,何况两者一比较,哪个产生的冗余代码更多呢?

  采用expression的做法如下:

<style type="text/css">
a {star : expression(onfocus=this.blur)}
</style>
<a href="link1.htm">link1</a>
<a href="link2.htm">link2</a>
<a href="link3.htm">link3</a>

  说明:里面的star就是自己任意定义的属性,你可以随自己喜好另外定义,接着包含在expression()里的语句就是JS脚本,在自定义属性与expression之间可别忘了还有一个引号,因为实质还是CSS,所以放在style标签内,而非s cript内。OK,这样就很容易地用一句话实现了页面中的链接虚线框的消除。不过你先别得意,如果触发的特效是CSS的属性变化,那么出来的结果会跟你的本意有差别。例如你想随鼠标的移进移出而改变页面中的文本框颜色更改,你可能想当然的会认为应该写为

<style type="text/css">
input
{star : expression(onmouseover=this.style.backgroundColor="#FF0000";
onmouseout=this.style.backgroundColor="#FFFFFF")}
</style>
<style type="text/css">
input {star : expression(onmouseover=this.style.backgroundColor="#FF0000";
onmouseout=this.style.backgroundColor="#FFFFFF")}
</style>
<input type="text">
<input type="text">
<input type="text">

  可结果却是出现脚本出错,正确的写法应该把CSS样式的定义写进函数内,如下所示:

<style type="text/css">
input {star : expression(onmouseover=function()
{this.style.backgroundColor="#FF0000"},
onmouseout=function(){this.style.backgroundColor="#FFFFFF"}) }
</style>
<input type="text">
<input type="text">
<input type="text">

添加评论
单击隐藏此项的评论。

巧用CSS的RevealTrans滤镜

CSS的RevealTrans动态滤镜是一个神奇的滤镜,它能产生23种动态效果,更为奇妙的是它还能在23种动态效果中随机抽用其中的一种。用它来进行网页之间的动态切换,简直方便极了,你只要在网页源代码的< head >与< /head >之间插入这样一行代码:< Meta content=revealTrans(Transition=14,Duration=3.0) http-equiv=Page-enter >,当你进入这个页面时,网页将象拉幕一样从中间向两边拉开,是不是别具一格?!
  RevealTrans滤镜只有两个参数,Duration:是切换时间,以秒为单位;Transition:是切换方式,它有24种方式,详见下表:
										切换效果   Transition参数值      切换效果       Transition参数值 
矩形从大至小      0              随机溶解            12 
矩形从小至大      1            从上下向中间展开      13 
圆形从大至小      2            从中间向上下展开      14 
圆形从小至大      3            从两边向中间展开      15 
向上推开          4            从中间向两边展开      16 
向下推开          5            从右上向左下展开      17 
向右推开          6            从右下向左上展开      18 
向左推开          7            从左上向右下展开      19 
垂直形百叶窗      8            从左下向右上展开      20 
水平形百叶窗      9              随机水平细纹        21 
水平棋盘          10             随机垂直细纹        22 
垂直棋盘          11            随机选取一种特效     23 
								
										1、制作一个Revealtrans滤镜,取名为“mytrans",其制作方法与前面介绍的静态滤镜相同,参数值为Transition=12,Duration=2。设置好后,在网页源代码的< head >与< /head >之间将有下面这样的代码:
< style type="text/css" >
< !--
.mytrans { filter:revealTrans(Transition=12,Duration=2)}
-- >
< /style >
  2、插入一个层,我们把层的“Layer ID”改为“div1”(可直接在层的属性面板上加入即可),并设置好层的背景和调整好层的大小,并把Revealtrans滤镜加载到到层上,这时你看到的层的标记代码是这样的:< div id="div1" style="position:absolute; width:680px; height:30px; z-index:37; background: #FFFFCC; layer-background-color: #FFFFCC; border: 1px none #000000" class="mytrans" >< /div >
  3、在网页源代码的< head >与< /head >之间插入下面这段Javascript程序:
  < script language="JavaScript" >
  < !--
  function HelpArray(len)
  {
  this.length=len;
  }
  // 建立一个数组,存放转换的内容。
  HelpText=new HelpArray(5);
  HelpText[0]="在一个文档使用动态转换的滤镜(Revealtrans)其实是很容易的。";
  HelpText[1]="首先,为对象的样式表单建立一个需要转换的“Revaltrans"滤镜,";
  HelpText[2]="然后,使用“apply()"方法防止错误,";
  HelpText[3]="现在,你可以改变任何你想改变的东西,";
  HelpText[4]="最后,“play()"方法开始进行转换。";
  ScriptText=new HelpArray(5);
  var i= -1;
  // 显示转换效果
  function playHelp()
  {
  if (i==4)
  { i=0 ;}
  else
  { i++; }
  div1.filters[0].apply();
  div1.innerText=HelpText[i];
  div1.filters[0].play();
  // 设置每段字幕演示的时间,以毫秒计。这里的时间要长于滤镜中的时间,以保证在转换结束后能停留一段时间。
  // 以方便看清楚字幕内容。在本例中字幕演示的时间是6秒,滤镜中设置的转换时间是2秒。
  mytimeout=setTimeout("playHelp()",6000);
  }
  -- >
  < /script >
  4、在网页的源代码的< body >中加入这样一句代码:onload="playHelp()"。
posted on 2006-10-22 10:52 acerbic coffee 阅读(1576) 评论(0)  编辑  收藏 所属分类: 个人记录

只有注册用户登录后才能发表评论。


网站导航: