asp.Net:HTMLプレビューdocxドキュメントの内容

5795 ワード

gmailがofficeドキュメントのプレビュー機能を発売して以来、各メールボックスが次々とフォローしてきたが、成熟したドキュメントが見つからず、不思議に思った.ビジネス機密?
今回はdocドキュメントをWebページでプレビューする必要があります.
一つの解決策はdocファイルをアップロードするときにwordの「別名保存」機能をコードで操作しhtmlに保存することです.
関連情報は、googleの「asp.netプレビューdocドキュメント」のキーワードで、同じ記事が検索されます.
この方式の限界は1で、各ドキュメントはhtmlコピーとリソースフォルダを生成して、空間の浪費は深刻です
2、サーバーは必ずofficeをインストールしなければなりません.もちろん、必要なdllを導入して、エラーのヒントに基づいてコピーしたDCOM構成を試してみることもできます.この点は私を振り回すたびに気が狂って、最後にofficeをインストールして解決しました.の
3、docxは現在テストされていません
大まかに以下のように実現し、誠意を持って注意します.officeをインストールしてから試したほうがいいです.
関連DLLを導入した後(wordやexcelなど)、次のコードを参照してください.
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.IO;  

using System.Diagnostics;  

using Word = Microsoft.Office.Interop.Word;  

using Excel = Microsoft.Office.Interop.Excel;  

using System.Reflection;  

using Microsoft.Office.Interop.Excel;  

  

  

public partial class upload_preview : System.Web.UI.Page  

{  

    protected void Page_Load(object sender, EventArgs e)  

    {  

  

        GenerationWordHTML("E:\\20110502.doc", "E:\\20110502.html");  

        GenerationExcelHTML("E:\\20110502.xls", "E:\\20110502.html");  

    }  

  

    /// <summary>  

    /// Ecxel    HTML     

    /// </summary>  

    /// <param name="FilePath">     ecxel     </param>  

    /// <param name="saveFilePath">      HTML     </param>  

    /// <returns>      ,   true,   false</returns>  

    protected bool GenerationExcelHTML(string FilePath, string saveFilePath)  

    {  

        try  

        {  

            Excel.Application app = new Excel.Application();  

            app.Visible = false;  

            Object o = Missing.Value;  

  

            ///      

            /*   Microsoft Excel 9 Object Library   : */  

            /*_Workbook xls = app.Workbooks.Open(FilePath, o, o, o, o, o, o, o, o, o, o, o, o);*/  

  

            /*   Microsoft Excel 10 Object Library   : */  

            _Workbook xls = app.Workbooks.Open(FilePath, o, o, o, o, o, o, o, o, o, o, o, o, o, o);  

  

            ///    ,    HTML  

            /*   Microsoft Excel 9 Object Library   : */  

            /*xls.SaveAs(saveFilePath, Excel.XlFileFormat.xlHtml, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o);*/  

  

            /*   Microsoft Excel 10 Object Library   : */  

            xls.SaveAs(saveFilePath, Excel.XlFileFormat.xlHtml, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o, o);  

  

            ///   Excel  

            app.Quit();  

            return true;  

        }  

        catch  

        {  

            return false;  

        }  

        finally  

        {  

            //       excel     

            Process[] myProcesses = Process.GetProcessesByName("EXCEL");  

            foreach (Process myProcess in myProcesses)  

            {  

                myProcess.Kill();  

            }  

        }  

    }  

  

    /// <summary>  

    /// WinWord    HTML     

    /// </summary>  

    /// <param name="FilePath">     word     </param>  

    /// <param name="saveFilePath">      HTML     </param>  

    /// <returns>      ,   true,   false</returns>  

    private bool GenerationWordHTML(string FilePath, string saveFilePath)  

    {  

        try  

        {  

            Word.ApplicationClass word = new Word.ApplicationClass();  

            Type wordType = word.GetType();  

            Word.Documents docs = word.Documents;  

  

            ///        

            Type docsType = docs.GetType();  

            Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { FilePath, true, true });  

  

            ///     ,    HTML   

            Type docType = doc.GetType();  

  

            /*   Microsoft Word 9 Object Library   : */  

            /*docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFilePath, Word.WdSaveFormat.wdFormatHTML });*/  

  

            /*   Microsoft Word 10 Object Library   : */  

            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,  

            null, doc, new object[] { saveFilePath, Word.WdSaveFormat.wdFormatFilteredHTML });  

  

            ///    Word  

            wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);  

            return true;  

        }  

        catch  

        {  

            return false;  

        }  

        finally  

        {  

            //       winword     

            Process[] myProcesses = Process.GetProcessesByName("WINWORD");  

            foreach (Process myProcess in myProcesses)  

            {  

                myProcess.Kill();  

            }  

        }  

    }  

}  

=============
これで中国語のリソースがなくなり、探し続け、外国人の実現を発見しましたが、word 2007しかサポートされていません.office 2007はopenXMLに基づいているので、もちろん自分で解析することができます.
このアドレスを参照
http://blog.maartenballiauw.be/post/2008/01/11/Preview-Word-files-(docx)-in-HTML-using-ASPNET-OpenXML-and-LINQ-to-XML.aspx
折衷しましょう.少なくともこの解決策は実現できます.docxの最後のurlは直接プレビューされ、ダウンロードリンクを生成するルールが提供されます.