狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

dsoframer控件學習小結

admin
2013年1月22日 21:17 本文熱度 5362



文章簡介:dsoframer是微軟提供一款開源的用于在線編輯、調用Word、 Excel 、PowerPoint等的ActiveX控件。國內很多著名的OA中間件,電子印章,簽名留痕等大多數是依此改進而來的。

一、先注冊一下DSOFramer.ocx

    操作:將.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 onload="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="保存" onclick="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!");
        }
    }
}

該文章在 2013/1/22 21:17:36 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved