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など)、次のコードを参照してください.
=============
これで中国語のリソースがなくなり、探し続け、外国人の実現を発見しましたが、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は直接プレビューされ、ダウンロードリンクを生成するルールが提供されます.
今回は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は直接プレビューされ、ダウンロードリンクを生成するルールが提供されます.