我想控制读取的Excel文件从第2行开始,应该如何写SQL语句?
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +
Path + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "select " + propertysName + " from [" + sheetName + "$]";
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn);
DataSet ds = new DataSet();
myCommand.Fill(ds, datasetTableName);
conn.Close();
return ds;
解决方案 »
- 怎么获取datagridview选中的单元格
- dataview里分类汇总问题
- 如何改变notifyIcon托盘图标的大小?
- 请问如何通过3G网络从服务端回调或向windows embedded handheld 6.5 设备的应用程序发送信息?
- C#如何获取BackgroundImage图片路径
- c#调用GetGlyphOutline问题
- 在DataGrid如何添加一列checkbox
- AE COM组件 对象转换失败RasterWorkspaceFactoryClass转换为IWorkspaceFactory
- 初学者,一个简单的问题
- 学完c#语法,再学什么?好心人给指条路!
- 我为什么没有权限上传头像泥??
- c#视频处理
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" +
Path + ";" + "Extended Properties=Excel 8.0;HDR=Yes;";
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
goALTER PROC [dbo].[Sp_InputExcel2007toSQL]
@dir NVARCHAR(100),--EXCEL文件存放路径:如D:\ExcelFiles
@tabname NVARCHAR(50) --定义导入到数据库中的表名
AS
SET NOCOUNT ON
CREATE TABLE #t([filename] NVARCHAR(2000))IF RIGHT(@dir,1)<>'\'
SET @dir=@dir+'\'
DECLARE @cmd NVARCHAR(2000)
SET @cmd = N'dir "' + @dir + '*.xls*" /B'INSERT #t EXEC master..xp_cmdshell @cmd
DELETE #t WHERE [filename] IS NULL
--在SQL中创建表:
DECLARE @S nvarchar(2000)
IF OBJECT_ID(@tabname) IS NULL
BEGIN
SELECT TOP 1 @S='SELECT TOP 0 * INTO '+ @tabname+' FROM OPENROWSET(
''MICROSOFT.ACE.OLEDB.12.0'', ''EXCEL 12.0;HDR=YES;IMEX=2;DATABASE='+@DIR+[filename]+'''
,''SELECT * FROM [Sheet1$]'')'
FROM #t
EXEC(@S)
END
--开始导入目录下的文件
SET @S = ''
SELECT @S = @S + 'INSERT '+@tabname+' SELECT * FROM OPENROWSET(
''MICROSOFT.ACE.OLEDB.12.0'', ''EXCEL 12.0;HDR=YES;IMEX=2;DATABASE='+@DIR+FILENAME+'''
,''SELECT * FROM [Sheet1$]'')'
FROM #t
EXEC(@S)
SET NOCOUNT OFFdrop table tt;
create table tt
(
tid varchar(10),
tname varchar(10))/*
--测试时先在D盘创建目录:D:\ExcelFiles
--任意新建几个表结构相同的excel文件,2003或2007版本均可,并任意存入一些内容。
--调用存储过程导入数据:
EXEC Sp_InputExcel2007toSQL 'D:','Tony'
--查询结果:
SELECT * FROM Tony
*/
EXEC Sp_InputExcel2007toSQL 'D:','tt'
select * from tt;
我测试了下,好像第一行永远都取不到(不管第一行是表头或是表内容[XP+VS2005+excel2003])用SQL语句取出时,第二行才算第一笔记录
设我的excel是三列(A,B,C) //以下为查询第二行开始的,所有记录
string strExcel ="select * from [sheet1$A1:C65535]";//sheet1为表名//以下为查询第二行开始的,所有记录
string strExcel ="select * from [sheet1$A4:C65535]";//sheet1为表名从其它行只需改变AN中的N就可以了也可以只取一列
select * from [sheet1$B1:B65535]
设我的excel是三列(A,B,C) //以下为查询第二行开始的,所有记录
string strExcel ="select * from [sheet1$A1:C65535]";//sheet1为表名//以下为查询第五行开始的,所有记录
string strExcel ="select * from [sheet1$A4:C65535]";//sheet1为表名从其它行只需改变AN中的N就可以了也可以只取一列
select * from [sheet1$B1:B65535]完整实现:
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Server.MapPath("~/yyy.xls") + ";" + "Extended Properties=Excel 8.0;";//HDR=Yes,红色为EXCEL文件
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
DataSet ds = null;
strExcel = "select * from [sheet1$A3:C65535]"; //EXCEL文件里的表
myCommand = new OleDbDataAdapter(strExcel, strConn);
ds = new DataSet();
myCommand.Fill(ds, "table1");
conn.Close();
return ds;
按单元格来读是可以的.
用office 的 dll文件引入.