从Excel里导入数据

by yt

 

Excel 和 SQL 都可以看成数据库,且Excel里面也有表,默认情况下表有:Sheet1,、Sheet2、Sheet3。

这样 Excel 和 SQL 就有点类似了,我们可以通过用访问 SQL 的方法来访问 Excel 。

 

访问 Excel 有两种方法 ODBC.NET Data Provider  && OLE DB.NET Data Provider 。这两种方法的访问的方法基本是一样的,但也有区别,这里就不展开了。在网上搜了很多读取 Excel 的方法,发现用第二种方法的比较多,且在尝试弄出以下代码的时候也发觉第二种方法的更为友好。具体原因不详,望高手指点...

 

 

//存在的问题

客户端想访问的是自己本机的 Excel 文件,但问题是以下接口是存放在客户端的,代码执行也是在客户端的,也就是说 接口访问的是服务器所在的机器上的 Excel 而不是客户端的 Excel 。

要解决这个问题,可以把客户端的文件上传到服务器端,然后再读取。(本人之见,应该有更好的方法,请指点...)

 

以下代码中的 接口 可以从Excel里面导入数据。而且放回 XmlDocument 。也可以返回其他类型的数据结构,这只是数据的不同表示而已,可以通过转换得到。

也可以导出 Excel ,只是改变代码中的查询语句而已。

支持读取 .xls || .xlsx 格式的文件。

 

Excel 内容 && 接口 && 返回的xmldocument格式如下:

代码
//此接口可连接 xls 和 xlsx 为后缀的 Excel
//sFullPath 为 文件路径名
//sTable 为 表名 一般是 Sheet1、Sheet2、Sheet3
public XmlDocument getListForExcel(string sFullPath, string sTable)
{
try
{
//此连接可以操作.xls与.xlsx文件
string strConn = "Provider=Microsoft.Ace.OleDb.12.0;" + "data source=" + sFullPath + ";Extended Properties='Excel 12.0; HDR=NO; IMEX=1'";
OleDbConnection conn
= new OleDbConnection(strConn);
conn.Open();

string strExcel = string.Format(" select * from [{0}$] ", sTable);
OleDbDataAdapter da
= new OleDbDataAdapter(strExcel, conn);
DataSet ds
= new DataSet();
da.Fill(ds, sTable);

//BuildXml
XmlDocument doc = new XmlDocument();
MemoryStream mStrm
= new MemoryStream();
StreamReader sRead
= new StreamReader(mStrm);
ds.WriteXml(mStrm, XmlWriteMode.WriteSchema);
mStrm.Seek(
0, SeekOrigin.Begin);
doc.Load(sRead);

conn.Close();
return doc;
}
catch
{
return null;
}
}

 

代码
1 <?xml version="1.0" encoding="utf-8" ?>
2 - <NewDataSet>
3 + <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
4 - <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
5 - <xs:complexType>
6 - <xs:choice minOccurs="0" maxOccurs="unbounded">
7 - <xs:element name="Sheet1">
8 - <xs:complexType>
9 - <xs:sequence>
10 <xs:element name="F1" type="xs:string" minOccurs="0" />
11 <xs:element name="F2" type="xs:string" minOccurs="0" />
12 </xs:sequence>
13 </xs:complexType>
14 </xs:element>
15 </xs:choice>
16 </xs:complexType>
17 </xs:element>
18 </xs:schema>
19 - <Sheet1>
20 <F1>ID</F1>
21 <F2>sName</F2>
22 </Sheet1>
23 - <Sheet1>
24 <F1>1</F1>
25 <F2>4</F2>
26 </Sheet1>
27 - <Sheet1>
28 <F1>2</F1>
29 <F2>5</F2>
30 </Sheet1>
31 - <Sheet1>
32 <F1>3</F1>
33 <F2>6</F2>
34 </Sheet1>
35 </NewDataSet>

 

posted on 2010-10-18 17:26  gdutlab624  阅读(367)  评论(1编辑  收藏  举报

导航