用asp.net網頁顯示word和excel文檔,不知如何運用下面網上發現的代碼,,求大神賜教


已經在E盤添加了12345.文件,aspx頁面不知要加什么控件,該cs文件只是更改了一些引用后,刪了word部分調試,頁面空白。怎么用啊??

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using Excel;
using System.Diagnostics;
using Microsoft;
using Word = Microsoft.Office.Interop.Word;



public partial class tel : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //word
        Response.Write(Get_Html("New.doc"));
        //excel
        ExcelConvertToHtml("E:\\12345.xls", "E:\\aaa.html");
    }

    protected void ExcelConvertToHtml(string xlsPath, string htmlPath)
    {
        try
        {
            Excel.Application app = new Excel.Application();
            app.Visible = false;
            Object o = Missing.Value;

            /// _Workbook     xls=app.Workbooks.Open(xlsPath,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o);   

            _Workbook xls = app.Workbooks.Open(xlsPath, o, o, o, o, o, o, o, o, o, o, o, o);
            object fileName = htmlPath;
            object format = Excel.XlFileFormat.xlHtml;//Html   

            // xls.SaveAs(ref     fileName,ref     format,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o);   
            xls.SaveAs(fileName, format, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o);
            //xls.SaveAs(
            object t = true;
            app.Quit();

            Process[] myProcesses = Process.GetProcessesByName("EXCEL");
            foreach (Process myProcess in myProcesses)
            {
                myProcess.Kill();
            }
        }
        catch (Exception ex)
        {
            System.Console.Write(ex.Message);
            // MessageBox.Show(ex.Message);
        }
    }
    private string Get_Html(string FileName)
    {

        Word.ApplicationClass word = new Word.ApplicationClass();
        Type wordType = word.GetType();
        Word.Documents docs = word.Documents;

        //     打開文件   
        Type docsType = docs.GetType();
        // RAID.doc
        // string newFileNamePath = this.Server.MapPath(mydata.Config.SysUploadPath + "/" + FileName);
        string newFileNamePath = this.Server.MapPath("download/" + FileName);
        Word.Document doc = (Word.Document)docsType.InvokeMember

("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { newFileNamePath, true,

true });

        //     轉換格式,另存為   
        Type docType = doc.GetType();
        object saveFileName = newFileNamePath.Replace(".doc", ".htm");
        //下面是Microsoft     Word     9     Object     Library的寫法,如果是10,可能寫成:   
        /*   
        docType.InvokeMember("SaveAs",     System.Reflection.BindingFlags.InvokeMethod,   
          null,     doc,     new     object[]{saveFileName,     Word.WdSaveFormat.wdFormatFilteredHTML});   
        */
        ///其它格式:   
        ///wdFormatHTML   
        ///wdFormatDocument   
        ///wdFormatDOSText   
        ///wdFormatDOSTextLineBreaks   
        ///wdFormatEncodedText   
        ///wdFormatRTF   
        ///wdFormatTemplate   
        ///wdFormatText   
        ///wdFormatTextLineBreaks   
        ///wdFormatUnicodeText   
        docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatHTML });

        //     退出     Word   
        wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);

        string newFileName = FileName.Replace(".doc", ".htm");
        return (newFileName);
    }

}




有word部分調試,出現顯示下面代碼調用目標發現異常:
  Word.Document doc = (Word.Document)docsType.InvokeMember

("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { newFileNamePath, true,

true });
 
怎么用啊怎么用啊???

12 个解决方案

#1


刪了word部分是什么意思?你的代碼是使用word存儲成html內容的,你刪除了word還怎么轉呢

#2


刪了word部分就是只運行以下部分

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Reflection;
using Excel;
using System.Diagnostics;
using Microsoft;
using Word = Microsoft.Office.Interop.Word;



public partial class tel : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //word
        Response.Write(Get_Html("New.doc"));
        //excel
        ExcelConvertToHtml("E:\\12345.xls", "E:\\aaa.html");
    }

    protected void ExcelConvertToHtml(string xlsPath, string htmlPath)
    {
        try
        {
            Excel.Application app = new Excel.Application();
            app.Visible = false;
            Object o = Missing.Value;

            /// _Workbook     xls=app.Workbooks.Open(xlsPath,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o);   

            _Workbook xls = app.Workbooks.Open(xlsPath, o, o, o, o, o, o, o, o, o, o, o, o);
            object fileName = htmlPath;
            object format = Excel.XlFileFormat.xlHtml;//Html   

            // xls.SaveAs(ref     fileName,ref     format,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o,ref     o);   
            xls.SaveAs(fileName, format, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o);
            //xls.SaveAs(
            object t = true;
            app.Quit();

            Process[] myProcesses = Process.GetProcessesByName("EXCEL");
            foreach (Process myProcess in myProcesses)
            {
                myProcess.Kill();
            }
        }
        catch (Exception ex)
        {
            System.Console.Write(ex.Message);
            // MessageBox.Show(ex.Message);
        }
    }
 
}


#3


因為運行全部的話,會出現以下情況:

        Word.Document doc = (Word.Document)docsType.InvokeMember

("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { newFileNamePath, true,

true });

這段代碼調試的目標出現異常
system.reflection.targetinvocationexception {"調用的目標發生了異常。"}

#4


現在我只有這段后台代碼,前台界面什么都沒有設置(不知咋設置。。),不知道怎么用啊。。。

#5


//word
Response.Write(Get_Html("New.doc"));
//excel
ExcelConvertToHtml("E:\\12345.xls", "E:\\aaa.html");

改成

ExcelConvertToHtml("E:\\12345.xls", "E:\\aaa.html");
Response.WriteFile("E:\\aaa.html");

#6


不要重復相同內容的發帖

#7


哦,我是一開始不會在帖中添加代碼,格式不好看,所以發多一次

#8


net_lover
如果要實現在網頁上找到該文件,點擊文件在網頁顯示出這個文檔,怎么在前台操作

#9


在前台操作無需操作。

首先,你要清楚。瀏覽器是不能直接顯示doc,xls的
其次,你可以使用Silverlight,好像可以轉換,但客戶端需要安裝office
另外,進行轉換成html顯示是一種方法,

另外,還可以轉成pdf或者swf進行顯示

#10


剛調試了幾次,excel文件英文和數字顯示正常,中文顯示亂碼,如何解決

#11


同時,我發現刪除了一下一段代碼依然可以運行,什么原因,這段代碼是干什么的,如何運用?

private string Get_Html(string FileName)
    {

        Word.ApplicationClass word = new Word.ApplicationClass();
        Type wordType = word.GetType();
        Word.Documents docs = word.Documents;

        // 打開文件   
        Type docsType = docs.GetType();
        // RAID.doc
        // string newFileNamePath = this.Server.MapPath(mydata.Config.SysUploadPath + "/" + FileName);
        string newFileNamePath = this.Server.MapPath("download/" + FileName);
        Word.Document doc = (Word.Document)docsType.InvokeMember

      ("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { newFileNamePath, true,

true });

        // 轉換格式,另存為   
        Type docType = doc.GetType();
        object saveFileName = newFileNamePath.Replace(".doc", ".htm");
        //下面是Microsoft Word 9 Object Library的寫法,如果是10,可能寫成:   
        /*   
        docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,   
        null, doc, new object[]{saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML});   
        */
        ///其它格式:   
        ///wdFormatHTML   
        ///wdFormatDocument   
        ///wdFormatDOSText   
        ///wdFormatDOSTextLineBreaks   
        ///wdFormatEncodedText   
        ///wdFormatRTF   
        ///wdFormatTemplate   
        ///wdFormatText   
        ///wdFormatTextLineBreaks   
        ///wdFormatUnicodeText   
        docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatHTML });

        // 退出 Word   
        wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);

        string newFileName = FileName.Replace(".doc", ".htm");
        return (newFileName);
    }

#12


又發現一個問題,每次新建一個12345.xls文件,第一次運行時總會顯示,

Response.WriteFile("E:\\aaa.html");
文件“E:\aaa.html”正由另一進程使用,因此該進程無法訪問此文件。
怎么解決?

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com