DSOFramer的使用 .

http://blog.csdn.net/phqm/article/details/2120084

DSOFramer的使用 .
分类: C#2.0 2008-02-25 21:28 4260人阅读 评论(6) 收藏 举报
一、先注册一下DSOFramer.ocx

操作:将DSOFramer.ocx复制到C:/windows/system32目录下,

开始->运行->regsvr32 DSOFramer.ocx , 系统会提示DSOFramer.ocx中的DllRegisterServer成功。

二、添加DSOFramer.ocx到你的项目中

操作:先说明一下,我用VS 2005 ,其他VS版本可能操作会有不同,操作应该也类似自己试试,问题应该不大。
在你要访问DSOFramer.ocx的目录上点选右键菜单中的“添加现有项”,找到DSOFramer.ocx,确定。


三、在网页中加载DSOFramer

新建Office.aspx

添加如下代码:
<object id="MyOffice" name = "MyOffice" style="LEFT: 0px; WIDTH: 100%; TOP: 0px; HEIGHT: 100%"
classid="clsid:00460182-9E5E-11D5-B7C8-B8269041DD57" codebase="dsoframer.ocx#version=2,2,0,0" >
</object>

[注]:VS 2005对语法的要求贼多,什么ID的值要用""括起来啦,<object>不能大写啦,……
没什么大碍,但是很烦人,简直就是微软版的唐僧,我给大家提供的代码是修改过的,VS不会有哪些废话了。

然后再body中加入onload事件的处理函数

<body οnlοad="show_word();">

再在<head></head>中间加入函数体


<script language="javascript" type="text/javascript">
<!--

function show_word() {
var str=window.location.search;
var pos_start=str.indexOf("id")+3;
if (pos_start == 2)
return ;

var id = "http://localhost/Getdc.aspx?id=" + str.substring(pos_start);
document.all. MyOffice.Open( id,false, "Word.Document");
}

// -->
</script>


四、编制Getdc.aspx.cs文件
建立Getdc.aspx文件,VS会同时建立与之关联的Getdc.aspx.cs文件

先加入命名空间
using System.Data.SqlClient;
using System.Data.SqlTypes;

编辑Getdc.aspx.cs的Page_Load函数;
protected void Page_Load(object sender, EventArgs e)
{
int pid = Convert.ToInt32(Request["id"]);

SqlConnection myConnection = new SqlConnection("Data Source=/"localhost/";Initial Catalog=/"demo/";Persist Security Info=True;User ID=demo;Password=demo");//数据库的相关设置自己改吧,我就不废话了
SqlCommand mycommand = myConnection.CreateCommand();
myConnection.Open();

mycommand.CommandText = "SELECT filedata " +
" FROM Table_word WHERE (ID = " + pid.ToString() + ") ";//其中filedata的数据库类型是varbinary(MAX)
SqlDataReader myReader = mycommand.ExecuteReader();
myReader.Read();
SqlBinary binaryStream = myReader.GetSqlBinary(0);
myReader.Close();
myConnection.Close();

Response.BinaryWrite(binaryStream.Value);
}

至此,只要你指定的ID没问题,就应该可以加载Word文档了。


五、建立保存文档的按钮


在Office.aspx中添加按钮

<input id="Button1" type="submit" value="保存" οnclick="return Submit_upload_onclick()" />

再建立一个input

<input type="file" name="File" id = "File"/>


然后添加Submit_upload_onclick()函数:

function Submit_upload_onclick() {
var str=window.location.search;
var pos_start=str.indexOf("id")+3;
if (pos_start == 2)
return ;

document.all.MyOffice.HttpInit();
document.all.MyOffice.HttpAddPostCurrFile("File", "");
var id = "http://localhost/Savedc.aspx?id=" + str.substring(pos_start);
document.all.MyOffice.HttpPost(id);
}

六、编制Savedc.aspx.cs文件
建立Savedc.aspx文件,VS会同时建立与之关联的Savedc.aspx.cs文件

先加入命名空间
using System.Data.SqlClient;
using System.Data.SqlTypes;

编辑Savedc.aspx.cs的Page_Load函数;

protected void Page_Load(object sender, EventArgs e)
{
int pid = Convert.ToInt32(Request["id"]);
Byte[] source_bin = Request.BinaryRead(Request.TotalBytes);

//---------------------------------------------------------------------------------------
int i, loop, again = -1, file_begin = -1;
for (i = 0; i < Request.TotalBytes; i++)
{
if (source_bin[i] == 13)
if (source_bin[i + 1] == 10)
break;
}
Byte[] MyHeader = new Byte[i];
for (loop = 0; loop < i; loop++)
MyHeader[loop] = source_bin[loop];

for (i += 2; i < Request.TotalBytes; i++)
{
if (source_bin[i] == 13)
if (source_bin[i + 1] == 10)
if (source_bin[i + 2] == 13)
if (source_bin[i + 3] == 10)
break;
}

file_begin = i + 4;
for (i = file_begin; i < Request.TotalBytes; i++)
{
for (loop = 0; loop < MyHeader.Length; loop++)
if (source_bin[i + loop] != MyHeader[loop])
break;
if (loop >= MyHeader.Length)
{
break;
}
}

Byte[] result = new Byte[i - file_begin];
//这是个不得已的办法,用循环肯定会慢,但我不会其他方法
//希望高手完善
for (loop = file_begin; loop < i - file_begin; loop++)
result[loop - file_begin] = source_bin[loop];

//---------------------------------------------------------------------------------------
//以上代码将word文档从二进制流中提取出来,存储在result[]中,方法虽笨,肯定好使
//本人不懂VB,更不懂Java,
//上面代码是我楞从梁无惧用VB写的无惧上传类V2.0里挑选有用的部分翻译成C#的,泪ing……
//看看人家梁兄,多无私,给同行提供这么好的东东
//我在网上找了N + 1天,就TM没找到C#版的,再泪ing……
//现在提供给大家,希望我是最后一个为此郁闷的人


SqlConnection myConnection = new SqlConnection("Data Source=/"localhost/";Initial Catalog=/"demo/";Persist Security Info=True;User ID=demo;Password=demo");//数据库的相关设置自己改吧
SqlCommand mycommand = myConnection.CreateCommand();
mycommand.CommandText = "UPDATE Table_word SET filedata = @myfiledata , b_finished = 1 WHERE (ID = @myID)";
mycommand.Parameters.Add("@myfiledata", SqlDbType.VarBinary, 0, "filedata");
mycommand.Parameters.Add("@myID", SqlDbType.Int, 4, "ID");

SqlDataAdapter mydpt;
DataSet myds = new DataSet();

mydpt = new SqlDataAdapter("SELECT ID ,filedata , b_finished FROM Table_copy WHERE (ID = " + Request["id"] + ")", myConnection);
myConnection.Open();

mydpt.UpdateCommand = mycommand;
mydpt.Fill(myds);
DataTable mydt = myds.Tables[0];
DataRow myrow;
myrow = mydt.Rows[0];
myrow.BeginEdit();
myrow["filedata"] = result;
myrow.EndEdit();

mydpt.Update(myds);
myConnection.Close();/**/
}


至此,只要你指定的ID没问题,就应该可以保存Word文档了。




编辑Savedc.aspx.cs的Page_Load函数;
protected void Page_Load(object sender, EventArgs e)
------------------------------------------------------------------------------
果然是ASP的写法。不过c#里面不需要这样,C# 提供了这样的接口

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.IO;

public partial class upload : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Clear();
//ID为文档的主键,如果ID不为空,则更新数据,否则新建一条记录
string ID = Request.Params["ID"];
string DocID,DocTitle,DocType;
DocID = "test";
DocTitle = "test";
if(ID != null && ID !=""){
DocID = Request.Params["DocID"];
DocTitle = Request.Params["DocTitle"];
}
DocType = Request.Params["DocType"];
if(DocType == "")
DocType = "doc";

DocType = DocType.Substring(0, 3);
if (Request.Files.Count > 0)
{
OleDbConnection objConnection;

HttpPostedFile upPhoto = Request.Files[0];
int upPhotoLength = upPhoto.ContentLength;
byte[] PhotoArray = new Byte[upPhotoLength];
Stream PhotoStream = upPhoto.InputStream;
PhotoStream.Read(PhotoArray, 0, upPhotoLength); //这些编码是把文件转换成二进制的文件

string strConnection = "Provider=Microsoft.Jet.OleDb.4.0;";
strConnection += @"Data Source=" + this.Server.MapPath("des.mdb");
objConnection = new OleDbConnection(strConnection);
objConnection.Open();

string strSql;
if (ID != null && ID != "")
{
strSql = "update Doc Set DocContent = @FImage where id = " + ID;
OleDbCommand comd = new OleDbCommand(strSql, objConnection); //执行sql语句
comd.Parameters.Add("@FImage", OleDbType.Binary);
comd.Parameters["@FImage"].Value = PhotoArray;
comd.ExecuteNonQuery(); //执行查询

}
else
{
strSql = "Insert into Doc(DocID,DocTitle,DocType,DocContent) values(@DocId,@DocTitle,@DocType,@FImage)";
OleDbCommand comd = new OleDbCommand(strSql, objConnection); //执行sql语句
if(DocID != "")
comd.Parameters.Add("@DocId", OleDbType.VarChar, 20).Value = DocID; //定义参数同时给它赋值
if (DocTitle != "")
comd.Parameters.Add("@DocTitle", OleDbType.VarChar, 50).Value = DocTitle;
comd.Parameters.Add("@DocType", OleDbType.VarChar, 10).Value = DocType;
comd.Parameters.Add("@FImage", OleDbType.Binary);
comd.Parameters["@FImage"].Value = PhotoArray;
comd.ExecuteNonQuery(); //执行查询
}
objConnection.Close(); //关闭数据库
Response.Write("OK");
Response.End();
//-------------------------------------------
}else{
Response.Write("No File Upload!");
}
}
}
### 回答1: dsoframer2.3.0.2是一种用于在Microsoft Office文档中嵌入和操纵ActiveX控件的工具。它是Office插件开发的一部分,可以使开发人员能够使用Visual Basic或其他编程语言在Office文档中插入各种控件,如图表、表单控件、文本框等。 这个版本的dsoframer2.3.0.2是采用了最新的技术进行开发,具有较高的稳定性和性能。它提供了一些强大的功能,如将Office文档在Web页面中嵌入、在Office文档中嵌入其他Office文档等。这些功能可以为用户提供方便,使他们能够在Office文档中进行数据交互和处理。 通过使用dsoframer2.3.0.2,开发人员可以轻松地创建自定义的Office文档,并向其中插入所需的控件。它还提供了一些内置的功能,如文档查看、打印、保存和导出等。这些功能可以方便用户进行文档的浏览和管理。 总的来说,dsoframer2.3.0.2是一种强大的工具,可以帮助开发人员轻松地在Microsoft Office文档中嵌入ActiveX控件,并为用户提供丰富的功能和便利性。无论是在个人使用还是在企业开发中,都可以通过使用dsoframer2.3.0.2来提升Office文档的功能和用户体验。 ### 回答2: dsoframer2.3.0.2是一款用于在Microsoft Office应用程序中嵌入和操作Office文档的开发工具。它为开发人员提供了一种简便的方式来集成Office文件的功能和特性,包括浏览、编辑、保存、打印、复制和粘贴等。 该工具使用COM接口和对象模型,使开发人员能够在自己的应用程序中创建和加载Word、Excel和PowerPoint等Office文档。通过使用dsoframer2.3.0.2,开发人员可以实现应用程序与Office文件的无缝集成,而无需打开Office应用程序。 dsoframer2.3.0.2具有丰富的功能,可以让开发人员轻松地处理和操作Office文档。例如,它可以让用户浏览文档的各个部分,包括表格、图表、图片和文本等。同时,开发人员还可以使用该工具实现对文档内容的修改、格式设置和样式调整等功能。 此外,dsoframer2.3.0.2还支持将Office文档保存为不同的格式,如PDF、HTML、RTF等。开发人员可以根据应用程序的需求选择合适的格式,以便与其他应用程序或设备进行无缝兼容性。 总的来说,dsoframer2.3.0.2是一款强大且易于使用的开发工具,能够帮助开发人员实现在自己的应用程序中嵌入和操作Office文档的功能。它提供了丰富的功能和灵活的接口,使开发人员能够灵活地定制和扩展应用程序,满足不同用户的需求。 ### 回答3: dsoframer2.3.0.2是一个微软Office开发工具,用于在Windows应用程序中嵌入和操作Microsoft Office文档。它提供了一个开发接口,允许开发人员在应用程序中添加Office文档(如Word文档、Excel表格、PowerPoint演示文稿)的编辑、浏览和打印功能。 dsoframer2.3.0.2具有许多功能和特性,如在应用程序中嵌入Office文档、通过API进行文档保存和打印、支持文档的页面设置、提供文档缩放、支持查找和替换文本、插入和删除内容等。它还提供了一些自定义选项,如隐藏Office工具栏和菜单、控制文档的编辑和只读模式。 使用dsoframer2.3.0.2可以为用户提供方便的文档操作功能,如在应用程序中显示并编辑Word文档、浏览和填写Excel表格、展示PowerPoint演示文稿等。它提供了与Office应用程序类似的界面和功能,用户可以在不打开Office应用程序的情况下,直接在应用程序中完成文档处理任务。 dsoframer2.3.0.2在软件开发中具有广泛的应用领域,特别适用于需要嵌入和操作Office文档的应用程序,如电子商务平台、文档管理系统、报告生成工具等。它提供了易于使用的编程接口和丰富的功能,为开发人员节省了开发时间和精力,并提升了应用程序的用户体验和功能扩展性。 总之,dsoframer2.3.0.2是一个有用的Office开发工具,通过它,开发人员可以方便地嵌入和操作Microsoft Office文档,为应用程序提供丰富的文档处理功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值