利用Aspose.Cell控件导入Excel非强类型的数据
导入Excel的操作是非常常见的操作,可以使用Aspose.Cell、APOI、MyXls、OLEDB、Excel VBA等操作Excel文件,从而实现数据的导入,在导入数据的时候,如果是强类型的数据,那么这几种方式好像都表现差不多,正常操作能够导入数据。如果是非强类型的数据,那么就需要特别注意了,一般情况下,导入的DataTable数据列的类型是以第一行内容作为确定列类型的,本文介绍利用Aspose.Cell控件导入Excel非强类型的数据的操作。
什么是强类型的数据呢,就是在Excel表格中,除了第一列名外,他们的数据格式都一样的,如下所示。

如果使用C#导入到Winform界面中,那么数据显示效果如下所示。从这里可以看到,这些数据都是遵循一定的格式,名字为字符串,年龄为数值。

使用OLEDB方式导入Excel数据的代码如下所示。
try
{ myDs.Tables.Clear();
myDs.Clear();
this.gridControl1.DataSource = null; string connectString = string.Format(connectionStringFormat, this.txtFilePath.Text);
string firstSheet = ExcelHelper.GetExcelFirstTableName(connectString);
OleDbConnection cnnxls = new OleDbConnection(connectString);
OleDbDataAdapter myDa = new OleDbDataAdapter(string.Format("select * from [{0}]", firstSheet), cnnxls);
myDa.Fill(myDs, "【导入表】"); this.gridControl1.DataSource = myDs.Tables[];
this.gridView1.PopulateColumns();
}
catch (Exception ex)
{
LogHelper.Error(ex);
MessageDxUtil.ShowError(ex.Message);
}
但有时,我们可能会碰到客户数据不一样的地方。如年龄可能输入了“10”,也可能输入“10岁”这样的,常规的导入,一般是以第一个出现的数值而定,如果是字符串,那么后面的数值可能导入就不能正常显示了。例如,如果是下面的Excel,那么数据Marks列就会以第一行数据为准,后面的那些 “Fail” 字符,将不可识别,在DataTable中的值变为NULL值了。

为了有效录入非强类型的表格数据,我们可以就不能使用常规的操作代码,Aspose.Cell的控件提供了一个API,名为ExportDataTableAsString的函数,这个函数是把所有内容转换为字符串集合类型,这样所有的内容将被保留。
| public System.Data.DataTable ExportDataTableAsString ( Int32 firstRow, Int32 firstColumn, Int32 totalRows, Int32 totalColumns, Boolean exportColumnName ) |
| Name | Description |
|---|---|
| firstRow | The row number of the first cell to export out. |
| firstColumn | The column number of the first cell to export out. |
| totalRows | Number of rows to be imported. |
| totalColumns | Number of columns to be imported. |
| exportColumnName | Indicates whether the data in the first row are exported to the column name of the DataTable |
使用Aspose.Cell这个API导入的数据代码如下所示。
bool exportColumnName = true;
Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();
workbook.Open(filepath);
Aspose.Cells.Worksheet worksheet = workbook.Worksheets[];
datatable = worksheet.Cells.ExportDataTableAsString(iFirstRow, iFirstCol, rowNum + , colNum + , exportColumnName);
使用该函数导入的数据,因为全部都以字符串格式进行导入,就不会出现,有些解析不了的问题了。在Winform中显示出来的结果显示,正常。

利用Aspose.Cell控件导入Excel非强类型的数据的更多相关文章
- 使用Aspose.Cell控件实现Excel高难度报表的生成(三)
在之前几篇文章中,介绍了关于Apsose.cell这个强大的Excel操作控件的使用,相关文章如下: 使用Aspose.Cell控件实现Excel高难度报表的生成(一) 使用Aspose.Cell控件 ...
- 使用Aspose.Cell控件实现Excel高难度报表的生成(二)
继续在上篇<使用Aspose.Cell控件实现Excel高难度报表的生成(一)>随笔基础上,研究探讨基于模板的Aspose.cell报表实现,其中提到了下面两种报表的界面,如下所示: 或者 ...
- 使用Aspose.Cell控件实现Excel高难度报表的生成
1.使用Aspose.Cell控件实现Excel高难度报表的生成(一) http://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html ...
- 使用Aspose.Cell控件实现Excel高难度报表的生成(一)
时光飞逝,生活.工作.业余研究总是在不停忙碌着,转眼快到月底,该月的博客文章任务未完,停顿回忆一下,总结一些经验以及好的东西出来,大家一起分享一下.本文章主要介绍报表的生成,基于Aspose.Cell ...
- (转)使用Aspose.Cell控件实现Excel高难度报表的生成(一)
本文章主要介绍报表的生成,基于Aspose.Cell控件的报表生成.谈到报表,估计大家都有所领悟以及个人的理解,总的来说,一般的报表生成,基本上是基于以下几种方式:一种是基于微软Excel内置的引擎来 ...
- 利用Aspose.Word控件和Aspose.Cell控件,实现Word文档和Excel文档的模板化导出
我们知道,一般都导出的Word文档或者Excel文档,基本上分为两类,一类是动态生成全部文档的内容方式,一种是基于固定模板化的内容输出,后者在很多场合用的比较多,这也是企业报表规范化的一个体现. 我的 ...
- 利用Aspose.Word控件实现Word文档的操作
Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及输出,由于一般输出的内容比较正规化或者多数是表格居多,所以一般 ...
- 黄聪:利用Aspose.Word控件实现Word文档的操作(转)
撰写人:伍华聪 http://www.iqidi.com Aspose系列的控件,功能都挺好,之前一直在我的Winform开发框架中用Aspose.Cell来做报表输出,可以实现多样化的报表设计及 ...
- 使用Aspose.Cell控件实现多个Excel文件的合并
之前有写过多篇关于使用Apose.Cell控件制作自定义模板报表和通用的导出Excel表格数据的操作,对这个控件的功能还是比较满意,而且也比较便利.忽然有一天,一个朋友说:你已经有生成基于自定义模板报 ...
随机推荐
- C#删除字符串最后一个字符的几种方法
字符串:string s = "1,2,3,4,5,"目标:删除最后一个 "," 方法:1.用的最多的是Substring,这个也是我一直用的s = s.Sub ...
- 解读Gartner《2015年度新兴技术成熟度曲线报告》
详细见:http://www.360doc.com/content/16/0209/16/26186435_533443133.shtml 今年的报告评估了112个领域超过2000项新型技术的市场类型 ...
- IOS开发 图形绘制,绘制线条,矩形,和垂直和居中绘制文字
概述 吐槽下IOS下 的图形绘图,代码冗长,不得不自己重新封装方法.整理形成本文. 绘制线 // 绘制直线 + (void)toDrawLineFromX:(CGFloat)x1 Y:(CGFloat ...
- server 2012 IIS 启用.NET 4.5
server2012 自带.NET 4.5 不过IIS服务器只有2.0 和 4.0 所以我们需要手动配置 1.服务器-添加角色和功能 2.依次下一步,选择到服务器角色 -点开web服务器(IIS)-应 ...
- 公钥、私钥、CA认证、数字签名、U盾
感谢传智播客的方立勋老师,在一个教学视频上,他巧妙地以蒋介石给宋美龄写密信作为例子,生动地讲述了软件密码学知识. 加密分为对称加密和非对称加密,我们传统理解的,发送数据之前使用一个加密器加密,接到数据 ...
- 多线程调用WebClient速度变慢的问题
设置 System.Net.ServicePoint 对象所允许的最大并发连接数 System.Net.ServicePoint 对象允许的最大并发连接数.默认值为 2 System.Net.Serv ...
- ML的灌水现象
(http://demonstrate.ycool.com/post.3137870.html) 看了几天 paper 和书,发现自己果然就是 zt好多东西就是不懂,那些人做的真快,我才建立起一种大致 ...
- 关于fork的一道经典面试题
这是一道面试题,问程序最终输出几个“-”: #include<stdio.h> #include<sys/types.h> #include<unistd.h> i ...
- HTML CSS——margin和padding的学习
你在学习margin和padding的时候是不是懵了,——什么他娘的内边距,什么他娘的外边距.呵呵呵,刚开始我也有点不理解,后来通过查资料学习总算弄明白了,现在我来谈一下自己对margin和paddi ...
- ruby -- 进阶学习(十二)fragment cache
基于rails4.0环境 Rails 页面缓存的方法很多,最近弱弱地尝试了fragment cache,用法还算简单~@_@|| 首先,查看config/environment/production. ...