在WEB项目中经常遇到excel文档在线预览的需求,基本的解决思路有以下几大类:excel文档转PDF、excel文档直接转html、后台读取excel数据返回给前端利用Excel效果的表格插件如(HandsonTable)将数据进行展示、部署微软Office Online服务(office web apps)实现在线预览、在线的office预览服务(如谷歌docs、微软officeapps)。

EXCEL转HTML

excel转html可以通过第三方工具openoffice、微软office或者第三方类库如POI/NPOI、aspose.cell等转换为html文件。其中POI组件是开源免费的,Java版本叫POI,C#版本叫NPOI。但是转换的效果不是很好,有多个sheet页面的时候,POI会将所有sheet表格展示在一个网页里面,表格顶部会显示sheet名称,如果sheet很多的话页面会很长,出现滚动条页面样式不是很美观。

aspose.cells是收费组件,支持java、.net、.net core,免费使用时候转换出的html页面会有水印“Evaluation Only. Created with Aspose.Cells”如果excel存在多个sheet,aspose转换出来的网页会带选项卡,点击选项卡会展示对应的sheet页面内容,展示效果比POI转换出的html效果的好。

首先在后台使用aspose读取excel文件并返回转换好的html文件目录返回给前台

private readonly ILogger _logger;

private readonly IWebHostEnvironment _webHostEnvironment;

    public HomeController(ILogger<HomeController> logger, IWebHostEnvironment webHostEnvironment)
{
_logger = logger;
_webHostEnvironment = webHostEnvironment;
}
public IActionResult Index()
{
return View();
} public IActionResult Privacy()
{
return View();
} [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
/// <summary>
/// 返回html地址
/// </summary>
/// <returns></returns>
public string ExcelToHtml()
{
//程序根目录
string rootpath = _webHostEnvironment.ContentRootPath;
//程序下webroot根目录
string webRootPath = _webHostEnvironment.WebRootPath;
string filepath = webRootPath + "\\excelFile\\test.xlsx";
//读取模板路径
Workbook book = new Workbook(filepath);
//filePath为保存文件的地址,需要服务端底下可以正常访问的路径
book.Save(webRootPath+ "\\excelFile\\test.html", SaveFormat.Html);
return "\\excelFile\\test.html";
}

前端接收到后台返回的地址进行一个展示

点击查看代码
@{
ViewData["Title"] = "Home Page";
}
<script type="text/javascript">
//预览excel
function ExcelToHtml() {
$.ajax({
url: "/Home/ExcelToHtml",
data: "",
type: "get",
async: false,
success: function (data) {
debugger
console.log(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, '_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');
},error(err)
{
debugger
}
});
}
</script>
<div class="text-center">
<h1 class="display-4">Welcome</h1>
<p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
<button onclick="ExcelToHtml()">预览excel</button>
</div>

效果如下

最新文章

  1. 【原】Python 用例:二进制写入和读取文件内容
  2. 【转】WPF: 自动设置Owner的ShowDialog 适用于MVVM
  3. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q144-Q146)
  4. Rendering pipeline overview(读书笔记1 --- Real-Time rendering)
  5. 浅谈mysql mvcc
  6. MYSQL 【汇总数据】 【分组数据】 学习记录
  7. 【JPA】表达条件查询的关键字
  8. 异步IO简介
  9. xamarin SimpleAdapter绑定出错问题
  10. nvl,空时的推断和取值
  11. NFinal学习笔记 03—代码生成器
  12. CentOS安装maven3.2.2(Linux系列适用)
  13. 洛谷 [P1341]无序字母对
  14. mysql 5.7版本后时间datetime 默认为 0000-00-00 00:00:00 问题
  15. ansible安装 使用 介绍
  16. vue报错如log,如果其他项目运行没问题,很有可能是代码错误 加externals报错
  17. Vivado如何使用命令行创建工程
  18. HeadFIrst Ruby 第六章总结 block return values
  19. jvm层面锁优化+一般锁的优化策略
  20. 【转】Redis学习---哈希结构内存模型剖析

热门文章

  1. 当 SQL DELETE 邂逅 Table aliases,会擦出怎样的火花
  2. .NET 反向代理-YARP 部署Https(SSL)
  3. 使用logstash读取MySQL数据传输到es,并且@timestamp字段采用MySQL中的字段时间--建议采用这个
  4. 计算shell 脚本的执行时间
  5. 《HelloGitHub》第 78 期
  6. Css3中自适应布局单位vh、vw
  7. 智能工厂的ERP和MES之间的区别?
  8. [题解] Codeforces Global Round 22 1738 A B C D E F 题解
  9. TypeScript(一)基本使用
  10. 原生js的懒人轮播图