最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
VB.net 2010 視頻教程 VB.net 2010 視頻教程 VB.net 2010 視頻教程
SQL Server 2008 視頻教程 c#入門經典教程 Visual Basic從門到精通視頻教程
當前位置:
首頁 > 編程開發 > C#編程 >
  • C#教程之C# 基于NPOI+Office COM組件 實現20行代碼在線

  • 2019-08-16 21:27 來源:未知

由于項目需要,需要一個在線預覽office的功能,小編一開始使用的是微軟提供的方法,簡單快捷,但是不符合小編開發需求,

就另外用了:將文件轉換成html文件然后預覽html文件的方法。對微軟提供的方法感興趣的小伙伴可以去看一下,夠簡單直接:word+excle+pdf表格在線瀏覽

我們來說一下小編使用的方法,這種預覽方式基于開源的NPOI+Office COM組件,使用是需要引入這幾個動態鏈接庫,總體如下:


C#在線預覽文檔(word,excel,pdf,txt,png)

  1. 預覽方式:將文件轉換成html文件然后預覽html文件
  2. 預覽word文件:需要引入Interop.Microsoft.Office.Interop.Word.dll(Office COM+組件)
  3. 預覽Excel文件:需要引入Interop.Microsoft.Office.Interop.Excel.dll(Office COM+組件)
  4. PDF文件直接嵌入到瀏覽器中進行查看,無需轉換(需安裝pdf閱讀器)(直接使用文件的路徑訪問即可)
  5. 文本文件直接嵌入到瀏覽器進行查看,無需轉換(直接使用文件的路徑訪問即可)
  6. 圖片文件直接嵌入到瀏覽器進行查看,無需轉換(直接使用文件的路徑訪問即可)

 

下面小編就預覽word文件和預覽excel文件進行學習一下。

準備工作:

1、創建MVC項目,引入NPOI和office Com組件動態鏈接庫,小編使用的是VS2017,

  直接在NuGet里面引入(只演示NPOI的引入,Interop.Microsoft.Office.Interop.Word和Interop.Microsoft.Office.Interop.Excel的引入一樣的操作)

 

2、在Content文件加下面建立一個excel文件和word文件,里面的內容可以自定義


 

 代碼編寫:

  后端代碼:

   我們準備完成后就開始編寫代碼進行調試,代碼如下,我直接整個控制器粘貼出來。

復制代碼
using Microsoft.Office.Interop.Excel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WebOnlineWord.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        //C#在線預覽文檔(word,excel,pdf,txt,png)
        //1、預覽方式:將文件轉換成html文件然后預覽html文件
        //2、預覽word文件:需要引入Interop.Microsoft.Office.Interop.Word.dll(Office COM組件)
        //3、預覽Excel文件:需要引入Interop.Microsoft.Office.Interop.Excel.dll(Office COM組件) 
        //4、PDF文件直接嵌入到瀏覽器中進行查看,無需轉換(需安裝pdf閱讀器)
        //5、文本文件直接嵌入到瀏覽器進行查看,無需轉換
        //6、圖片文件直接嵌入到瀏覽器進行查看,無需轉換


        #region Excel預覽方法

        /// <summary>
        ///  excel 轉換為html
        /// </summary>
        /// <param name="path">要轉換的文檔的路徑</param>
        /// <param name="savePath">轉換成的html的保存路徑</param>
        /// <param name="wordFileName">轉換后html文件的名字</param>
        public JsonResult ExcelToHtml()
        {
            ResultJson result = new ResultJson();
            string path = Server.MapPath("/Content/excel.xlsx");  
            string savePath = Server.MapPath("/Content/"); 
            string wordFileName = "ExcelToHtml";
            string str = string.Empty;
            Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook workbook = null;
            Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
            workbook = repExcel.Application.Workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
            object htmlFile = savePath + wordFileName + ".html";
            string resultUrl = htmlFile.ToString();
            object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
            workbook.SaveAs(htmlFile, ofmt, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
            object osave = false;
            workbook.Close(osave, Type.Missing, Type.Missing);
            repExcel.Quit();
            result.str = "/Content/" + wordFileName + ".html"; ;
            return Json(result, JsonRequestBehavior.AllowGet);

        }

        #endregion


        #region Excel預覽方法

        /// <summary>
        ///  word 轉換為html
        /// </summary>
        /// <param name="path">要轉換的文檔的路徑</param>
        /// <param name="savePath">轉換成的html的保存路徑</param>
        /// <param name="wordFileName">轉換后html文件的名字</param>
        public JsonResult WordToHtml()
        {
            ResultJson result = new ResultJson();
            string path = Server.MapPath("/Content/word.docx");
            string savePath = Server.MapPath("/Content/");
            string wordFileName = "WordToHtml";
            Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
            Type wordType = word.GetType();
            Microsoft.Office.Interop.Word.Documents docs = word.Documents;
            Type docsType = docs.GetType();
            Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { (object)path, true, true });
            Type docType = doc.GetType();
            string strSaveFileName = savePath + wordFileName + ".html";
            object saveFileName = (object)strSaveFileName;
            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML });
            docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
            wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
            result.str = "/Content/" + wordFileName + ".html"; ;
            return Json(result, JsonRequestBehavior.AllowGet);

        }

        #endregion

        public class ResultJson
        {
            public bool res { get; set; }
            public string info { get; set; }
            public string str { get; set; }
        }
    }
}
復制代碼

 前端代碼:

   代碼如下,我直接整個頁面粘貼出來。

復制代碼
@{
    ViewBag.Title = "Home Page";
}

<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script type="text/javascript">
   
    //預覽excel
    function ExcelToHtml() {
        $.ajax({
            url: "/Home/ExcelToHtml",
            data: "",
            type: "POST",
            async: false,
            dataType: "json",
            success: function (data) {
                //獲得窗口的垂直位置
                var iWidth = 1400;
                var iHeight = 800;
                var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
                //獲得窗口的水平位置
                var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
                window.open(data.str, '_blank', 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');

               
            }
        });
    }

    //預覽word
    function WordToHtml() {
        $.ajax({
            url: "/Home/WordToHtml",
            data: "",
            type: "POST",
            async: false,
            dataType: "json",
            success: function (data) {
                //獲得窗口的垂直位置
                var iWidth = 1400;
                var iHeight = 800;
                var iTop = (window.screen.availHeight - 30 - iHeight) / 2;
                //獲得窗口的水平位置
                var iLeft = (window.screen.availWidth - 10 - iWidth) / 2;
                window.open(data.str, '_blank', 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');


            }
        });
    }

</script>


<div style="margin-top:20px;height:800px">
      <input type="button" onclick="ExcelToHtml()" value="預覽excel" />
       <input type="button" onclick="WordToHtml()" value="預覽word" />
</div>
復制代碼

 


 效果查看:

  在線預覽excel:

     如下,很顯然讀取到了我們事先準備好的excel。

 

 

 

  在線預覽excel:

     如下,很顯然讀取到了我們事先準備好的word。

 

 


 

 

 總結:

 到這里一個簡單的在線預覽office就完成了,這是一個初始手稿,需要優化后續功能。

 感興趣的朋友可以關注一波,我們下次學習怎么在線編輯,實時保存(每改一下保存一下)和一鍵保存(編輯完成后點擊保存)

 原文地址:https://www.cnblogs.com/xiongze520/p/11358585.html

 轉載請注明出處,謝謝!

pk10赛车冠军技巧
最稳的pk10计划iphone 北京pk10计划手机软件 北京pk10数字的规律 超神手机版pk10软件 pk10北京赛车9码技巧 pk10四期倍投计划表 pk10极速赛车论坛 北京赛车冠军怎样选5码 北京赛车系统下载安装 pk10教程视频 北京pk10选号公式 北京赛车pk10赚钱技巧 北京赛车怎么提升概率 pk10技巧北京快三 北京pk10大小计划
线上赚钱的方式有哪些 点广告赚钱网站源码 不联网手机版免费单机打麻将 捕鱼大师有多少被骗的 漫画努力赚钱表情 广东26选5最新开奖查询 有在手机网上捞偏门不犯法赚钱的吗 账号注销还可以赚钱进去吗 大富豪棋牌游戏平台