刚刚开始做Excel相关的项目,所以遇到的问题不管大小都给记录一下

偶然的机会在添加数据的时候全改成了数字,结果输出的时候全自动变成了科学计数法,这是excel的强大功能,能自动识别数字和字符串,太聪明了反而有些麻烦,就像如果输入身份证(18位数字)的话那就不行了。超过了11位呢,下面查了些资料总结一下解决方案:

方法1:  在往excel中添加数据的时候在数据的前面加单引号或者其他字符、空格等,我的是这个方法解决的

 public static string ExportTable(ArrayList data, ArrayList columns)
        {

            ArrayList columnsBottom = getColumnsBottom(columns);

            ArrayList columnsTable = getColumnsTable(columns);

            StringBuilder sb = new StringBuilder();
            //data = ds.DataSetName + "\n";

            //data += tb.TableName + "\n";
            sb.AppendLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");
            sb.AppendLine("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
            //写出列名

            ; i < columnsTable.Count; i++)
            {
                ArrayList columnsRow = (ArrayList)columnsTable[i];
                sb.AppendLine("<tr style=\"font-weight: bold; white-space: nowrap;\">");
                foreach (Hashtable column in columnsRow)
                {
                    sb.AppendLine("<td colspan=" + column["colspan"] + " rowspan=" + column["rowspan"] + ">" + column["header"] + "</td>");
                }
                sb.AppendLine("</tr>");
            }
            //写出数据

            ;
            foreach (Hashtable row in data)
            {
                sb.Append("<tr>");
                foreach (Hashtable column in columnsBottom)
                {
                    Object value;
                    if (column["field"] != null)
                    {
                        value = row[column["field"]];
                    }
                    else
                    {
                        value = "";
                    }
                    ;
                    if(Convert.ToString(column["field"]) == "Order_Code")
                    {
                        sb.AppendLine("<td>" + value + "&nbap;</td>");
                    }else
                    {
                        sb.AppendLine("<td >" + value + "</td>");
                    }
                }
                sb.AppendLine("</tr>");
                count++;
            }
            sb.AppendLine("</table>");

            return sb.ToString();
        }

方法2:在样式中添加样式::<td style=”vnd.ms-excel.numberformat:@”>

 public static string ExportTable(ArrayList data, ArrayList columns)
        {

            ArrayList columnsBottom = getColumnsBottom(columns);

            ArrayList columnsTable = getColumnsTable(columns);

            StringBuilder sb = new StringBuilder();
            //data = ds.DataSetName + "\n";

            //data += tb.TableName + "\n";
            sb.AppendLine("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">");
            sb.AppendLine("<table cellspacing=\"0\" cellpadding=\"5\" rules=\"all\" border=\"1\">");
            //写出列名

            ; i < columnsTable.Count; i++)
            {
                ArrayList columnsRow = (ArrayList)columnsTable[i];
                sb.AppendLine("<tr style=\"font-weight: bold; white-space: nowrap;\">");
                foreach (Hashtable column in columnsRow)
                {
                    sb.AppendLine("<td colspan=" + column["colspan"] + " rowspan=" + column["rowspan"] + ">" + column["header"] + "</td>");
                }
                sb.AppendLine("</tr>");
            }
            //写出数据

            ;
            foreach (Hashtable row in data)
            {
                sb.Append("<tr>");
                foreach (Hashtable column in columnsBottom)
                {
                    Object value;
                    if (column["field"] != null)
                    {
                        value = row[column["field"]];
                    }
                    else
                    {
                        value = "";
                    }
                    ;
                    if(Convert.ToString(column["field"]) == "Order_Code")
                    {
                        sb.AppendLine("<td style=\"vnd.ms-excel.numberformat:@\">" + value + "</td>");
                    }else
                    {
                        sb.AppendLine("<td >" + value + "</td>");
                    }
                }
                sb.AppendLine("</tr>");
                count++;
            }
            sb.AppendLine("</table>");

            return sb.ToString();
        }

方法3:

ADO.NET读Excel时,会根据该列的前n行数据(n个数来自注册表HKEY_LOCAL_MACHINE/Software/Microsoft/Jet/4.0/Engines/Excel/TypeGuessRows),根据这几行数据的内容来判断该列的类型,这个类型跟Excel中该列的类型无关(文本类型应该是数据前面有一个')。如果这n行中的数据有文本有数字,也就是混合类型,则根据HKEY_LOCAL_MACHINE/Software/Microsoft/Jet/4.0/Engines/Excel/ImportMixedType来取值。如果ImportMixedType值为Text,则该列为文本;如果值为Majority Type,则取数据多的类型。

为了能把有文本有数字的列正确读出,我们需要把注册表中ImportMixedType项设置为text,TypeGuessRows设置为0(表示要读取所有数据再来判断是否是混合类型)

另外需注意,IMEX的取值会影响是否使用注册表中ImportMixedType和MAXSCANROWS这两项,如果IMEX=1,则使用,如果为0或者2,则不使用。而IMEX=1是打开的只读连接,所以要正确读取,只能使用只读的方式。

Asp.net导出Excel/Csv文本格式数据的更多相关文章

  1. asp.net导出Excel 按照预定格式,以及解决导出乱码

    protected void ToExcel() { //新建一个Gridview,原因:避免当前窗口GridView外层没有直接跟form标签,从而避免“gridview1未包含在run='serv ...

  2. [转] Asp.Net 导出 Excel 数据的9种方案

    湛刚 de BLOG 原文地址 Asp.Net 导出 Excel 数据的9种方案 简介 Excel 的强大之处在于它不仅仅只能打开Excel格式的文档,它还能打开CSV格式.Tab格式.website ...

  3. asp.net导出excel并弹出保存提示框

    asp.net导出excel并弹出保存提示框 2013-07-12 | 阅:1  转:78   |  分享  腾讯空间 人人网 开心网 新浪微博 腾讯微博 搜狐空间 推荐给朋友 举报          ...

  4. Asp.net导出Excel续章(自定义合并单元格,非Office组件)

    结合上次写的导出Excel方法,这次上头要求我将列头进行一下合并 以前的效果: 改进后的效果: 在上篇文章中写到了Excel的导出方法,这次为了避免在生产环境中使用Office组件,服务器各种权限配置 ...

  5. asp.net导出excel示例代码

    asp.net导出excel的简单方法. excel的操作,最常用的就是导出和导入. 本例使用NPOI实现. 代码:/// <summary> );             ;       ...

  6. ASP.NET导出EXCEL类

    最新ASP.NET导出EXCEL类 说明:可以导出ASP.NET页面和DATAGRID(WebControl)数据,可以导出表单头 using System;using System.Data;usi ...

  7. Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式

    Python生成文本格式的excel\xlwt生成文本格式的excel\Python设置excel单元格格式为文本\Python excel xlwt 文本格式 解决: xlwt 中设置单元格样式主要 ...

  8. Excel表格文本格式的数字和数字格式如何批量转换

    Excel表格文本格式的数字和数字格式如何批量转换 在使用Excel表格对数据求和时,只能对单元格内常规格式的数据进行计算,而不能对单元格中的文本格式的数据进行计算,特点就是在单元格的左上角有一个绿色 ...

  9. .net解决数据导出excel时的格式问题

    在项目中一般都需要将报表数据导出到EXCEL中,但经常出现导出长串数据(如身份证)到EXCEL中后显示为科学计数法的格式,或者报表中显示为001的数据导出到Excel后成了1的格式. 下面简单介绍一下 ...

随机推荐

  1. Node.js Web 模块

    什么是 Web 服务器? Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务.它只需支持HTTP协议.HTML文档格式及URL,与客 ...

  2. 常用meta整理[转载]

    < meta > 元素 概要 标签提供关于HTML文档的元数据.元数据不会显示在页面上,但是对于机器是可读的.它可用于浏览器(如何显示内容或重新加载页面),搜索引擎(关键词),或其他web ...

  3. HTTP中的Range: bytes=0-

    HTTP中的Range就是分段请求字节数,也是大家经常说的断点续传.Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的 表示第二个 ...

  4. 【WEB API项目实战干货系列】- WEB API入门(一)

    这篇做为这个系列的第一篇,做基本的介绍,有经验的人可以直接跳到第二部分创建 ProductController.   创建 Web API 项目 在这里我们使用VS2013, .NET 4.5.1创建 ...

  5. 学习笔记TF061:分布式TensorFlow,分布式原理、最佳实践

    分布式TensorFlow由高性能gRPC库底层技术支持.Martin Abadi.Ashish Agarwal.Paul Barham论文<TensorFlow:Large-Scale Mac ...

  6. J2EE--常见面试题总结 -- 一

    StringBuilder和StringBuffer的区别: String       字符串常量   不可变  使用字符串拼接时是不同的2个空间 StringBuffer  字符串变量   可变   ...

  7. Input类型是checkbox时checked属性获取

    记录一下checkbox 的 checked 属性的获取办法,以备忘记: 假如你的一个HTML页中有这么一段代码: <input name="chbRem" id=" ...

  8. .net core 同时实现网站管理员后台、会员、WebApi登录及权限控制

    我们在开网站信息系统时,常常有这样几个角色,如后台的管理员,前台的会员,以及我们各种应用的WebAPI 都需要进行登录操作及权限控制,那么在.net core如何进行设计呢. 首先我使用的是.net ...

  9. JDBC之代码优化

    上一次我们是先实现了JDBC对数据库的增删查改操作,然后在增加新信息过程中发现了新的问题,即当某一操作失败,为了维护数据库的一致性,我们需要回滚事务.在其中我们了解了事务的工作原理及相关代码的使用. ...

  10. [转]Oracle High Water Level高水位分析

    PLSQL_性能优化系列14_Oracle High Water Level高水位分析 http://www.cnblogs.com/eastsea/p/4005814.html 一.摘要 PLSQL ...