1.如何在網頁上顯示word和excel
a.可以使用office組件或aspose將word 和excel 轉換為pdf 然后在網頁上打開pdf,但是效果不是很好
.比如說excel 多個工作薄不是按exce 格式顯示出來,寬度大小,不好控制(?).
b.可以使用office組件或aspose將文檔轉換為html,但是轉換為html 會產生額外的XML和CSS和圖片文件.(當文件保存到服務器其他盤符中,
文件流讀取html,只好訪問html頁面,其他html附帶的 css和圖片和xml,無權限訪問,文件流也不好同時讀取他們幾個(?).
c.可以使用其他轉換,比如http://www.cutepdf.com/(?),或者用文件流讀取再轉換(沒試過)
d.最好將文件轉換為Mhtml格式的,這是因為Mhtml是個單個網頁文件.(主要是便於文件流讀取放在本地的文件)
Mhtml稱為聚合html文檔web文檔或單一文件網頁應用於(asscss,word,excel)是單個網頁 文件可將網站所有元素(包括聲音,圖片)保存到單個mhtml文件中.
2.對於項目而言如何上傳文件,文件上傳到哪兒,如何保存這些上傳文件
a.可以將文件上傳到asp.net項目當中,但是據說項目越來越大影響后期運行效率,不利於維護,沒有驗證過.
b.可以將文件用數據流讀取保存到數據庫當中,沒有實踐過(?).
b.可以將文件上傳到服務器本地磁盤當中,便於對文件的操作和管理.
A.如果上傳到服務器讀取轉換的網頁文件
B.上傳到數據庫轉換成網頁文件(沒試過)(?)
C.上傳到服務器項目外的其他文件中,好像微軟在asp.net上面出於安全考慮並不支持直接訪問站點外的文件(?),其他類型開發不清楚支不支持,
所以才必須將office裝換位單個網頁文件Mhtml,用文件流的方式讀取顯示在網頁上,
1)可以使用添加虛擬目錄,就是在服務器上添加虛擬目錄路徑,映射到絕對路徑目錄上就是指向你要訪問的圖片路徑,在Vs開發中新建上傳文件夾,
只是在發布文件后的ISS上, 做改動,將原有文件夾變為虛擬路徑文件,不過還是按照Server.MapPath(@"~/new_ams/file/" + fileName)獲取路徑,
(?)具體還沒實踐過.
2)可以將用文件流讀取本地文,參考代碼http://www.cnblogs.com/insus/archive/2013/02/05/2892678.html,
但是有一點文件流好像只可以讀取單個文件(?),不可以讀取同時讀取html +外部CSS+圖片,所以運用前面的方法將文件轉換為Mhtml格式的,
當Office轉化為來的Mhtml用文件流讀取時web頁面顯示的是Hmtl的亂碼內容,原因是解碼問題,具體參考
參考鏈接 http://www.cnblogs.com/SanMaoSpace/archive/2013/03/02/2941078.htm
3.利用office 自帶的組件將office轉換為Html
用Office組件將Office轉換為Html,參考鏈接 http://zhidao.baidu.com/link?url=AvlZUEusXh7C
a.引用office組件,如果office 沒有激活,最好激活和添加開發模式的(?),在vs添加引用里面程序集,如果引用失敗,右擊程序集屬性
,嵌入互操類改為False,為什么改為false(?). using Word = Microsoft.Office.Interop.Word; using Excel = Microsoft.Office.Interop.Excel;
b.如何將office 轉變為單一網頁文件Mhtml,當時這個問題搞了一天結果是應該選擇wdFormatWebArchive ,
Web 檔案格式,他是不帶Mhtml的單次,說明中也沒提示。
c.但是,由於某些原因(權限,配置)在服務器上不可運行,具體解決方法,有待探究.
文件出自:http://www.cnblogs.com/mark01/p/4244197.html

/// <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 { FilePath = @"D:\a\請假審批表.doc"; saveFilePath = @"D:\a\請假審批表.html"; 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(); } } } /// <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 { FilePath = @"D:\a\申購單.xlsx"; saveFilePath = @"D:\a\申購單.html"; 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的寫法: */ Excel._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, Excel.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(); } } }

string parameter = context.Request.QueryString["file"]; context.Response.ContentType = "message/rfc822"; FileStream fs = new FileStream(parameter, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); Byte[] bytes = br.ReadBytes((Int32)fs.Length); br.Close(); fs.Close(); context.Response.OutputStream.Write(bytes, 0,bytes.Length);

FileStream fileStream = new FileStream(fileResPath, FileMode.Open); long fileSize = fileStream.Length; byte[] fileBuffer = new byte[fileSize]; fileStream.Read(fileBuffer, 0, (int)fileSize); //如果不寫fileStream.Close()語句,用戶在下載過程中選擇取消,將不能再次下載 fileStream.Close(); Context.Response.ContentType = "application/octet-stream"; Context.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(fileName.Substring(19), Encoding.UTF8)); Context.Response.AddHeader("Content-Length", fileSize.ToString()); Context.Response.BinaryWrite(fileBuffer); Context.Response.End(); Context.Response.Close();
總結:我認為最好的辦法, 上傳為offfice文件時,就將office轉換為Mhtml (可以通過Office組件,或者aspose),將他們同時保存到服務器本地的其他文件中
,然后再用文件流讀取office 和Mhtml ,剛開始就生成mhtml 方便后者的每次預覽都要生成,速度較慢,保存到服務器本地完全是減少項目壓力.便於數據管理操作.
$經過幾個星期的磨蹭,感覺用com 組件做,在服務器上對訪問權限做配置,因為不太了解,所以還是放棄,但是可以實現當然在本地可以運行(?)
,具體解決方法在我的后面一節有所說明,用aspose 沒有破解版的,最新版本的aspose.cell 可以將excel 轉換為Mhtml
aspose :https://code.msdn.microsoft.com/Applying-Conditional-af9e0e4f/view/Discussions#content