记录一个 C# 导出 Excel 的坑
Ø 简介
其实该文章并没有什么技术含量,只是记录下个人心得。在以后有朋友遇到类似问题,可以借鉴下,或者遇到相同问题时的提供个参考方向。
也算我的一个经历吧,这个问题我花了足足一天多的时间才找到问题,解决问题。因为刚开始进公司,对项目不怎么熟,所以有点慢!话不多说,上正题:
1. 相关描述
1) 项目导出 Excel 还是采用比较原始的方式,对,就是我们大名鼎鼎的 Microsoft.Office.Interop.Excel.dll 程序集,使用包括以下对象:
Microsoft.Office.Interop.Excel.Application |
Microsoft.Office.Interop.Excel.Workbook |
Microsoft.Office.Interop.Excel.Worksheet |
2) 问题描述
可以正常导出,但是打开 Excel 文件时:
1. 有些单元格有数据,但是显示为空白
2. 会显示“受保护的视图”的警告
2. 解决办法
1) 首先说第一个问题
进过一番调试,发现是因为该单元格的数据(也就是字符串)的字节长度大于 255 bytes 时,就会出现显示空白的情况。如果小于 255 个字节,则正常显示。
2) 然后,忽略第一个问题,尝试解决第二个问题“受保护的视图”的警告
1. 经过,在网上找了一些导出 Excel 的代码,各种尝试发现,原来网上的代码导出并不会出现以上问题;
2. 好,问题可以断定,是我们导出的代码出问题了,再经过一番“代码分段执行法”(我找问题的一个方法)或者“代码替换执行”,最后将问题指向了下面这行代码:
workbook.SaveAs(filePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel7, m_objOpt, m_objOpt, m_objOpt, m_objOpt, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
这段代码没什么问题,主要是标红的这个参数。没错,就是这个参数导致了整个问题。
3. 以上这个参数表示导出为"Micorosoft Excel 5.0/95 工作薄(*.xls)" 格式的 Excel. 什么意思?其实我也不知道,应该是一个 Excel 内部版本号?
参考:https://www.cnblogs.com/mingjing/p/5955725.html
4. 该参数是一个枚举,后来了解到指定为 XlFileFormat.xlWorkbookNorma 即可,再次运行程序,导出 Excle, OK,没有了警告,长字符也正常显示了。
3. 友情提示
xls 表示适用于 Excel97-2003 的版本;
xlsx 则表示当前最新的工作簿后缀名,适用于 Excel2007及以上版本。
如果导出的 Excel 文件,在打开时报类似“格式不一致”的问题,则可以判断是否是因为文件后缀(如:*.xls)与导出时,代码中指定的格式是否一致?不一致时,就会引发该问题。
记录一个 C# 导出 Excel 的坑的更多相关文章
- 【NodeJs】记录一个阿里云redis的坑
背景 一个风和日丽的下午,一个上线的大好日子,以为一切准备好,上个线也就三五分钟的事.但是... 图样图森破. 背景是这样的,项目需要,在阿里云开通redis,在项目中配好redis的连接字符串后,以 ...
- 一个关于导出excel模板的实例
1 首先jsp页面 点击模板下载,会自动下载模板excel,效果如下 让我们看源码: 1 jsp页面 <div class="tab-pane" id="profi ...
- 写一个通用的List集合导出excel的通用方法
前几天要做一个数据导出Excel 我就打算写一个通用的. 这样一来用的时候也方便,数据主要是通过Orm取的List.这样写一个通用的刚好. public static void ListToExcel ...
- MVC NPOI Linq导出Excel通用类
之前写了一个模型导出Excel通用类,但是在实际应用中,可能不是直接导出模型,而是通过Linq查询后获取到最终结果再导出 通用类: public enum DataTypeEnum { Int = , ...
- 数据导出Excel,动态列
今天碰到一个需求,要求将用户回答的问卷及问题导出Excel表格,问卷对应的问题数量不一致,需要动态添加列表头,简单记录. 要导出Excel需要添加poi.jar包 用户-问卷实体(固定列): pack ...
- ASP.NET Core 导入导出Excel xlsx 文件
ASP.NET Core 使用EPPlus.Core导入导出Excel xlsx 文件,EPPlus.Core支持Excel 2007/2010 xlsx文件导入导出,可以运行在Windows, Li ...
- NPOI导出Excel (C#) 踩坑 之--The maximum column width for an individual cell is 255 charaters
/******************************************************************* * 版权所有: * 类 名 称:ExcelHelper * 作 ...
- C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序
C#中缓存的使用 缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可: <%@ Outp ...
- .net实现一个简单的通用查询数据、导出Excel的网页
背景:临时提供一个简单的网页,供其他人浏览数据库(Oracel.MSSQL)的某些数据,并导出Excel.支持在配置文件中随时添加或修改sql. 实现:把sql语句等信息保存一个xml文件中,前端页面 ...
随机推荐
- javascript split() 把一个字符串分割成字符串数组,类似于PHP的 explode()函数
用法类似于框里的 例子:
- 安装Goland开发工具
安装Goland开发工具 开发工具: 文本类的编辑器:记事本,notepad,sublime text,atom... 通过命令执行程序 IED:集成开发环境(integrated develop ...
- 关于python的十一道练习
关于python的十一道练习 1.编写程序,输入一个自然数字符串,然后输出各位数字之和.例如,输入字符串1234,输出10. def sums1(): #第一题 strs=input('请输入一个自然 ...
- .net 数据源DataSet 转换成模型
/// <summary> /// DataSet转换成model 自动赋值返回集合 /// </summary> /// <typeparam name="T ...
- C# 矢量图EMF 总结
个人知识记录.如果有用请点赞,否则勿喷.忽略. 个人站点:https://i.cnblogs.com/EditPosts.aspx?opt=1 注意:句柄的操作1.创建 代码如下: Metafile ...
- JAVA 基础篇
一.数组 1. 什么是数组? 数组和变量差不多,也是可以存放数据的,但是数组可以存放多个数据,而且多个数据的数据类型统一 格式 数据类型 [] 数组名称; 还有一种等效的写法,不推荐 数据类型 数组名 ...
- 移动端适配方案(rem+flex)
为什么用rem不用px? 主流:各大网站的移动版绝大多数都是用的rem. 移动端屏幕分辨率差别太大:最低适配的iPhone6,分辨率仅为750*1334.而现在市面上大多数手机,都达到了1080* ...
- Typescript基础(1)——数据类型
前言 这是开始学习Typescript的一些笔记,涉及的都是很基础的知识点.大神们请绕路或者欢迎指点.今天开始第一部分数据类型的学习. 数据类型 Typescript中为了使代码编写更加规范,更加易于 ...
- opencv::DNN介绍
DNN模块介绍: Tiny-dnn模块 支持深度学习框架 - Caffe - TensorFlow - Torch/PyTorch DNN运用 图像分类 对象检测 实时对象检测 图像分割 预测 视频对 ...
- Dynamics CRM中的操作(action)是否是一个事务(transaction)?
关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复168或者20151104可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 以前的博文 微软Dynamics ...