取得指定excel文件内的sheet数及每一个sheet的列数
2010-06-29 18:40
225 查看
---------------------------------------------------------
-- happyflystone
-- 2010.04
-- 转载注明出处--->http://blog.csdn.net/happyflystone
-- 取得指定excel文件内的sheet数及每一个sheet的列数。
------------------------------------------------------
CREATE PROC sp_operate_excel
@excelfilename NVARCHAR(100),
@strErrorMessage VARCHAR(1000) OUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @hr INT;
DECLARE @objExcel INT;
DECLARE @objWorkBooks INT;
DECLARE @objWorkBook INT;
DECLARE @cmd NVARCHAR(4000);
DECLARE @i INT,@j int;
DECLARE @IndexCount int;
DECLARE @sheetname varchar (255 ) ;
SET @strErrorMessage = '';
DECLARE @tb TABLE(id INT identity,sheetname VARCHAR(100),colnums int);
--创建Excel.Application对象
EXEC @hr = sp_OACreate 'Excel.Application',@objExcel OUTPUT;
IF @hr = 0
BEGIN
--创建Workbooks对象
EXEC @hr = sp_OAGetProperty @objExcel,'Workbooks',@objWorkbooks OUTPUT;
IF @hr = 0
BEGIN
--分解
--打开Excel文件
SET @cmd = 'Open("'+@excelfilename+'")';
EXEC @hr = sp_OAMethod @objWorkbooks,@cmd,@objWorkBook OUTPUT;
IF @hr = 0
BEGIN
SET @i = 1;
EXEC @hr = sp_oagetproperty @objWorkbook , 'Sheets.Count' , @IndexCount OUT
--循环多少个Sheet
WHILE @i <= @IndexCount
BEGIN
SET @cmd = 'Sheets('+ltrim(@i)+').Name';
EXEC @hr = sp_OAGetProperty @objWorkbook,@cmd,@sheetname OUT--@objSheet OUTPUT;
SET @cmd = 'Sheets('+ltrim(@i)+').UsedRange.cells.Count'
EXEC @hr = sp_OAGetProperty @objWorkbook,@cmd,@j OUTPUT;
INSERT @tb SELECT @sheetname,@j
SET @i = @i +1;
END
END
END
ELSE
SET @strErrorMessage = '创建工作薄对象失败!';
END
ELSE
SET @strErrorMessage = '创建Excel对象失败!'
IF @hr = 0
EXEC @hr = sp_OAMethod @objExcel,'Quit';
--消除Excel对象
IF @hr = 0
EXEC @hr = sp_OADestroy @objWorkbooks;
IF @hr = 0
EXEC @hr = sp_OADestroy @objExcel;
select * from @tb
END
GO
DECLARE @RET VARCHAR(100)
EXEC sp_operate_excel 'C:/BOOK1.XLS',@RET OUT
/*
id sheetname colnums
----------- ------------ -----------
1 Sheet1 4
2 Sheet2 2
3 Sheet3 5
*/
DROP PROC sp_operate_excel
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/04/01/5442575.aspx
-- happyflystone
-- 2010.04
-- 转载注明出处--->http://blog.csdn.net/happyflystone
-- 取得指定excel文件内的sheet数及每一个sheet的列数。
------------------------------------------------------
CREATE PROC sp_operate_excel
@excelfilename NVARCHAR(100),
@strErrorMessage VARCHAR(1000) OUT
AS
BEGIN
SET NOCOUNT ON
DECLARE @hr INT;
DECLARE @objExcel INT;
DECLARE @objWorkBooks INT;
DECLARE @objWorkBook INT;
DECLARE @cmd NVARCHAR(4000);
DECLARE @i INT,@j int;
DECLARE @IndexCount int;
DECLARE @sheetname varchar (255 ) ;
SET @strErrorMessage = '';
DECLARE @tb TABLE(id INT identity,sheetname VARCHAR(100),colnums int);
--创建Excel.Application对象
EXEC @hr = sp_OACreate 'Excel.Application',@objExcel OUTPUT;
IF @hr = 0
BEGIN
--创建Workbooks对象
EXEC @hr = sp_OAGetProperty @objExcel,'Workbooks',@objWorkbooks OUTPUT;
IF @hr = 0
BEGIN
--分解
--打开Excel文件
SET @cmd = 'Open("'+@excelfilename+'")';
EXEC @hr = sp_OAMethod @objWorkbooks,@cmd,@objWorkBook OUTPUT;
IF @hr = 0
BEGIN
SET @i = 1;
EXEC @hr = sp_oagetproperty @objWorkbook , 'Sheets.Count' , @IndexCount OUT
--循环多少个Sheet
WHILE @i <= @IndexCount
BEGIN
SET @cmd = 'Sheets('+ltrim(@i)+').Name';
EXEC @hr = sp_OAGetProperty @objWorkbook,@cmd,@sheetname OUT--@objSheet OUTPUT;
SET @cmd = 'Sheets('+ltrim(@i)+').UsedRange.cells.Count'
EXEC @hr = sp_OAGetProperty @objWorkbook,@cmd,@j OUTPUT;
INSERT @tb SELECT @sheetname,@j
SET @i = @i +1;
END
END
END
ELSE
SET @strErrorMessage = '创建工作薄对象失败!';
END
ELSE
SET @strErrorMessage = '创建Excel对象失败!'
IF @hr = 0
EXEC @hr = sp_OAMethod @objExcel,'Quit';
--消除Excel对象
IF @hr = 0
EXEC @hr = sp_OADestroy @objWorkbooks;
IF @hr = 0
EXEC @hr = sp_OADestroy @objExcel;
select * from @tb
END
GO
DECLARE @RET VARCHAR(100)
EXEC sp_operate_excel 'C:/BOOK1.XLS',@RET OUT
/*
id sheetname colnums
----------- ------------ -----------
1 Sheet1 4
2 Sheet2 2
3 Sheet3 5
*/
DROP PROC sp_operate_excel
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/htl258/archive/2010/04/01/5442575.aspx
相关文章推荐
- 取得指定excel文件内的sheet数及每一个sheet的列数
- 取得指定excel文件内的sheet数及每一个sheet的列数、行数
- vba打开excel文件遍历sheet的名字和指定单元格的值
- 遍历指定文件夹,逐个打开每一个excel文件,进行操作
- 使用VBA读取指定Excel文件指定Sheet指定单元格的内容
- excel转换成指定格式的文件
- VBA遍历当前目录下指定类型的excel文件并复制文件内指定的内容到新表中
- 生成Excel *.xls 生成 xls的格式与文件扩展名指定的格式不一致
- asp.net 上传Excel文件时出现: Microsoft JET Database Engine 未指定的错误
- 宏:合并多个Excel文件,Excel合并Sheet
- 将ListView中的数据导出到指定的Excel文件中
- Excel 表格中根据某一列的值从另一个xls文件的对应sheet中查找包含其中一列的内容(有点拗口)
- 开源jxls - java导Excel(多sheet) - 模板文件定义类似jsp的el表达式
- 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
- 拷贝既存excel文件sheet方法
- jxl读取指定文件下的所有Excel文件,但是是.xls文件,查的是jxl不支持excel2007
- ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致”
- EXCEL文件显示:您尝试打开的文件的格式与文件扩展名指定的格式不一致,打开前请验证文件示被损坏且来源可
- 取得指定文件里面的内容
- 用VBA生成的EXCEL,打开报如下错误:您尝试打开的文件"1.xls"的格式与文件拓展名指定的格式不一致。。。。