dsoframer用法
来源:互联网 发布:matlab如何读取usb数据 编辑:程序博客网 时间:2024/04/29 04:57
控件附带说明给出了保存文档至服务器的javascript函数,如:
function SaveToWeb()
{
document.all.FramerControl1.HttpInit();
document.all.FramerControl1.HttpAddPostCurrFile("FileData", "mydoc.doc");
var err = document.all.FramerControl1.HttpPost("Http://202.114.12.137/newvan/pm/auxi/SaveDoc.aspx");
if (!err)
alert('保存失败!');
else
alert('保存成功!');
}
由此可见,关键问题是如何实现SaveDoc.aspx模块。于是乎在网上搜索相应的解决方案,但没有一个能在服务器上成功保存正确的文件。失望之余索性将原文档和上传文档用UltraEdit打开进行二进制级比较,然后抓包分析POST数据时http数据包的格式,最后终于找到了解决的办法,贴出来供遇到同样问题的朋友参考,代码如下:
BinaryReader bReader = new BinaryReader(Request.InputStream);
string strTemp = Encoding.GetEncoding("iso-8859-1").GetString(
bReader.ReadBytes((int)bReader.BaseStream.Length), 0, (int)bReader.BaseStream.Length);
string match = "Content-Type: application/msword\r\n\r\n";
int pos = strTemp.IndexOf(match) + match.Length;
bReader.BaseStream.Seek(pos, SeekOrigin.Begin);
string newFile = Server.MapPath(".") + "\\MyFile2.doc";
FileStream newDoc = new FileStream(newFile, FileMode.Create, FileAccess.Write);
BinaryWriter bWriter = new BinaryWriter(newDoc);
bWriter.BaseStream.Seek(0, SeekOrigin.End);
while (bReader.BaseStream.Position < bReader.BaseStream.Length - 38)
bWriter.Write(bReader.ReadByte());
bReader.Close();
bWriter.Flush();
bWriter.Close();
这里应该注意的是,从字节流中获取字符串时一定要采用iso-8859-1的编码方式,不要采用utf-8或其他,因为utf-8会将asci字符也扩展成相应的unicode双字节形式。原理很简单,代码面前了无秘密。
DSOFramer原有的接口说明
===================================================================
DSOFramer原有的接口说明
1.void CreateNew(BSTR ProgIdOrTemplate)
新建文档,
其中: ProgIdOrTemplate参数:
Excel Spreadsheet "Excel.Sheet"
Excel Chart "Excel.Chart"
PowerPoint Presentation "PowerPoint.Show"
Project Project "MSProject.Project"
Visio Drawing "Visio.Drawing"
Word Document "Word.Document"
2. HRESULT Open([in] VARIANT Document, [in, optional] VARIANT ReadOnly,
[in, optional] VARIANT ProgId, [in, optional] VARIANT WebUsername, [in, optional] VARIANT WebPassword)
打开文档,可以是本地文件或者是服务器文件
参数:
Document 文档路径
ReadOnly 是否已只读模式打开
ProgId OLE类型
WebUsername 用户名(访问网络的文件时候,有可能需要)
WebPassword 密码
例子:
DsoFramer1.Open "C:\TestBook.xls"
DsoFramer1.Open "C:\Plain.txt", , "Word.Document" //用Word来打开c:\plain.txt文件
DsoFramer1.Open "https://secureserver/test/mytest.asp?id=123", True, "Excel.Sheet", "MyUserAccount", "MyPassword"
3.HRESULT Save([in, optional] VARIANT SaveAsDocument, [in, optional] VARIANT OverwriteExisting,
[in, optional] VARIANT WebUsername, [in, optional] VARIANT WebPassword);
保存文件在本地
DsoFramer1.Save "c:\1.doc"
4.Activate
激活当前文档,没搞明白有什么用
5. HRESULT ActiveDocument([out,retval] IDispatch** ppdisp);
返回当前活动文档的Dispatch接口,这个接口很重要,可以通过这个接口,操作所有的文档接口。
如:下面 javascript 语句调用Office内置的对话框
var obj;
obj = new Object(document.all.FramerControl1.ActiveDocument);
if(obj !=null){
var dd;
dd = obj.Application.Dialogs(84).Show();
//... ...
//delete it
delete obj;
}
6. HRESULT Close();
关闭当前文档,建议在页面关闭的时候调用。
MS的原来的版本,有时候关不掉Word,已经修复了。
7. HRESULT Caption([out,retval] BSTR* pbstr);
属性,获取|设置窗口标题
8. HRESULT Titlebar([in] boolean vbool);
HRESULT Titlebar([out,retval] boolean* pbool);
显示或者隐藏标题栏
9. HRESULT Toolbars([in] boolean vbool);
HRESULT Toolbars([out,retval] boolean* pbool);
显示或者隐藏工具栏
10. HRESULT ModalState([in] boolean vbool);
HRESULT ModalState([out,retval] boolean* pbool);
11.HRESULT ShowDialog([in] dsoShowDialogType DlgType);
显示对话框
12.HRESULT EnableFileCommand([in] dsoFileCommandType Item, [in] boolean vbool);
HRESULT EnableFileCommand([in] dsoFileCommandType Item, [out,retval] boolean* pbool);
13. HRESULT BorderStyle([in] dsoBorderStyle style);
HRESULT BorderStyle([out, retval] dsoBorderStyle* pstyle);
14. HRESULT BorderColor([in] OLE_COLOR clr);
HRESULT BorderColor([out,retval] OLE_COLOR* pclr);
15. HRESULT BackColor([in] OLE_COLOR clr);
HRESULT BackColor([out,retval] OLE_COLOR* pclr);
16.HRESULT ForeColor([in]OLE_COLOR clr);
HRESULT ForeColor([out,retval]OLE_COLOR* pclr);
17.HRESULT TitlebarColor([in] OLE_COLOR clr);
HRESULT TitlebarColor([out,retval] OLE_COLOR* pclr);
18.HRESULT TitlebarTextColor([in] OLE_COLOR clr);
HRESULT TitlebarTextColor([out,retval] OLE_COLOR* pclr);
19.HRESULT ExecOleCommand([in] LONG OLECMDID, [in, optional] VARIANT Options, [in, optional] VARIANT* vInParam, [in, out, optional] VARIANT* vInOutParam);
20.HRESULT Menubar([in] boolean vbool);
HRESULT Menubar([out,retval] boolean* pbool);
21.HRESULT HostName([in] BSTR bstr);
HRESULT HostName([out,retval] BSTR* pbstr);
22. HRESULT DocumentFullName([out,retval] BSTR* pbstr);
文档的路径
23.HRESULT PrintOut([in, optional] VARIANT PromptUser, [in, optional] VARIANT PrinterName, [in, optional] VARIANT Copies,
[in, optional] VARIANT FromPage, [in, optional] VARIANT ToPage, [in, optional] VARIANT OutputFile);
24.HRESULT PrintPreview();
25.HRESULT PrintPreviewExit();
26.HRESULT IsReadOnly([out,retval] boolean* pbool);
是否为只读的。
27.HRESULT IsDirty([out,retval] boolean* pbool);
是否保存了,实际可以用来判读文档有没有修改
oframer.IsDirty = TRUE //文档没有保存,处于修改状态
oframer.IsDirty = FALSE //文档已经保存,没有修改
新加的接口说明(开发接口)
[color=red]当前版本:V2.2.0.8 2007-02-07
[/color]下载控件需要登录
说明:
控件未经大批量测试,难免有Bug,
发现 Bug,请及时发帖或者Mail:wanhhf@gmail.com
版本修改记录:
V2.2.0.8修改:
增加了N多个事件,挺不错的东西
[id(DSOF_DISPID_WORD_DocumentChange), helpstring("DSOF_DISPID_WORD_DocumentChange")]
HRESULT WORD_DocumentChange();
[id(DSOF_DISPID_WORD_DocumentBeforePrint), helpstring("DSOF_DISPID_WORD_DocumentBeforePrint")]
HRESULT WORD_DocumentBeforePrint();
[id(DSOF_DISPID_WORD_WindowActivate), helpstring("DSOF_DISPID_WORD_WindowActivate")]
HRESULT WORD_WindowActivate();
[id(DSOF_DISPID_WORD_WindowSelectionChange), helpstring("DSOF_DISPID_WORD_WindowSelectionChange")]
HRESULT WORD_WindowSelectionChange();
[id(DSOF_DISPID_WORD_WindowBeforeRightClick), helpstring("DSOF_DISPID_WORD_WindowBeforeRightClick")]
HRESULT WORD_WindowBeforeRightClick();
[id(DSOF_DISPID_WORD_WindowBeforeDoubleClick), helpstring("DSOF_DISPID_WORD_WindowBeforeDoubleClick")]
HRESULT WORD_WindowBeforeDoubleClick();
V2.2.0.6修改:
修改Open,参数为空时候,一个小 Bug
修改了URL过长时候一个Bug
增加了一个替换文字的接口
long ReplaceText(BSTR strSearchText, BSTR strReplaceText, long lGradation);
V2.2.0.2修改:
修改了HttpPost相对路径的一些问题。
V2.2.0.0增加:
[id(0x00010041), helpstring("Get Rev Index")]
HRESULT GetRevCount( [out,retval] long * pbool);
[id(0x00010042), helpstring("Get Rev Index Info")]
HRESULT GetRevInfo([in] long lIndex, [in] long lType, [out,retval] BSTR* pbool);
[id(0x00010043), helpstring("Set Doc Prop")]
HRESULT SetValue([in] BSTR strValue, [in] BSTR strName, [out,retval] long* pbool);
[id(0x00010044), helpstring("Set Doc Variable")]
HRESULT SetDocVariable([in] BSTR strVarName, [in] BSTR strValue,[in] long lOpt, [out,retval] long* pbool);
[id(0x00010045), helpstring("Save page To Doc")]
HRESULT SetPageAs([in] BSTR strLocalFile, [in] long lPageNum, [in] long lType,[out,retval] long* pbool);
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
LoadDso.js
var s = ""
s += "<OBJECT id=DSOFramer align='middle' style='LEFT: 0px; WIDTH: 100%; TOP: 0px; HEIGHT: 100%'"
s += "classid=clsid:00460182-9E5E-11D5-B7C8-B8269041DD57 codeBase=DSOFramer.ocx#Version=2,2,0,6' >"
s += "</OBJECT>"
document.write(s)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
接口文档:
/*1.新建*///新建Worddocument.all.FramerControl1.CreateNew("Word.Document");//新建Exceldocument.all.FramerControl1.CreateNew("Excel.Sheet");/*2.打开文件*///打开制定的本地文件document.all.FramerControl1.Open("C:\\TestBook.xls");//制定用Word来打开c:\plain.txt文件document.all.FramerControl1.Open("C:\\Plain.txt",false, "Word.Document");//打开服务器的文件 document.all.FramerControl1.Open "https://secureserver/test/mytest.asp?id=123",true, "Excel.Sheet", "MyUserAccount", "MyPassword");//打开服务器的文件 document.all.FramerControl1.Open("http://localhost/1.doc", true);/*3.保存文件*///到本地document.all.FramerControl1.Save("c:\\1.doc",true);//服务器 /*增加Http协议Post上传接口,可以Post一个动态页面(jsp,asp,php...),由动态页面负责解析数据bool HttpInit();bool HttpAddPostString(BSTR strName, BSTR strValue);bool HttpAddPostCurrFile(BSTR strFileID, BSTR strFileName);BSTR HttpPost(BSTR bstr); *///初始化Http引擎document.all.FramerControl1.HttpInit();//增加Post变量document.all.FramerControl1.HttpAddPostString("RecordID","20060102200");document.all.FramerControl1.HttpAddPostString("UserID","李局长");//上传打开的文件document.all.FramerControl1.HttpAddPostCurrFile("FileData", "文档名.doc");//执行上传动作document.all.FramerControl1.HttpPost("http://xxxx.com/uploadfile.asp"); /*4.修订留痕*///进入留痕状态document.all.FramerControl1.SetTrackRevisions(1);//进入非留痕状态document.all.FramerControl1.SetTrackRevisions(0);//接受当前修订document.all.FramerControl1.SetTrackRevisions(4);/*5.设置当前用户*/document.all.FramerControl1.SetCurrUserName("张三"); /*6.设置当前时间(笔迹留痕会显示("Like 2006:02:07 11:11:11")*/document.all.FramerControl1.SetCurrTime("2006:02:07 11:11:11");/*7.设置和创建书签,此功能比较强大,设置书签数据、添加书签和添加红头文件就靠他了SetFieldValue(BSTR strFieldName, BSTR strValue, BSTR strCmdOrSheetName)strFieldName:书签名strValue:要设置的值strCmdOrSheetName:命令 ::ADDMARK:: 添加BookMark::DELMARK:: 删除这个BookMark::GETMARK:: 定位到这个BookMark::FILE:: 插入的是文件::JPG:: 插入的是图片一般来说:WORD中书签是做好的,可以通过此接口把外界数据设置进书签中去。*///在当前WORD位置插入标签,标签名为"book1",数值为"test"document.all.FramerControl1.SetFieldValue("book1","test","::ADDMARK::");//设置书签"Time",数值为"2006-03-16 22:22:22"document.all.FramerControl1.SetFieldValue("Time","2006-03-16 22:22:22","");//在书签位置"hongtou",插入红头文件"http://222.222.222.222/hongtou1.doc" 这样,红头就自动插进去了document.all.FramerControl1.SetFieldValue("hongtou","http://222.222.222.222/hongtou1.doc","::FILE::");/*8.设置菜单显示情况BOOL SetMenuDisplay(long lMenuFlag)lMenuFlag为以下数值的组合#define MNU_NEW 0x01#define MNU_OPEN 0x02#define MNU_CLOSE 0x04#define MNU_SAVE 0x08#define MNU_SAVEAS 0x16#define MNU_PGSETUP 0x64#define MNU_PRINT 0x256#define MNU_PROPS 0x32#define MNU_PRINTPV 0x126*///只有“新建”菜单可用 document.all.FramerControl1..SetMenuDisplay(1);//只有“打开”菜单可用 document.all.FramerControl1.SetMenuDisplay(2);//只有“打开”和“新建”菜单可用 document.all.FramerControl1.SetMenuDisplay(3);/*
- dsoframer用法
- dsoframer论坛
- 注册dsoframer
- DSOFramer使用
- Dsoframer使用
- DSOFramer使用
- DSOFramer.h
- dsoframer.cpp
- 修改dsoframer,支持office2007
- DSOFramer的使用
- dsoframer.ocx 应用思路
- DSOFramer.ocx 控件使用
- 免费下载dsoframer,dsoframerex
- dsoframer 2.1 版本源码
- dsoframer 中文乱码解决方法
- 学习微软的DSOFRAMER
- dsoframer控件学习小结
- dsoFramer.ocx入门
- 企业网站搜索引擎名次优化的seo战略
- UVa 10596 - Morning Walk
- R 数据框操作
- Java编程中“为了性能”需做的26件事
- 时钟二
- dsoframer用法
- 使用impdp的networ_link从11.2.0.3向10.2.0.1同步数据时遭遇内部错误
- 如何创建对搜索引擎更加友好的内容
- android_Activity系列 activity的传递
- bellman ford算法
- em和px
- Spring 注解学习手札(七) 补遗——@ResponseBody,@RequestBody,@PathVariable
- C# BindingSource
- C# GDI+使用操作、入门解析