Jul 21, 2009

Split a big xlsx file to several small files


Dim sFSO,sExcelApp,ExBook,NewBook,SourceSheet,NewSheet,oRange
Dim Parameters,fullfilepath,bookcount,sfile
SET Parameters = Wscript.arguments
Set sFSO = CreateObject("Scripting.FileSystemObject")
'If no command line arguments provided, quit
If Parameters.Count = 0 Then
WScript.Quit(1)
Else
fullfilepath = Parameters.item(0)
End If

If fullfilepath = "" or Not Right(fullfilepath,5) = ".xlsx" or Not sFSO.FileExists(fullfilepath) Then
Error=MsgBox("No valid input file provided. Stopping the script now.",vbokonly, "CK")
WScript.Quit(1)
End If

On Error Resume Next 'Resume Error
Set sExcelApp = CreateObject("Excel.Application") 'Create Excel instance
If Err.Number <> 0 Then 
Err.Clear
WScript.Quit(1)
End If

sExcelApp.Workbooks.Open (fullfilepath)
Set ExBook = sExcelApp.ActiveWorkbook
Set SourceSheet = ExBook.worksheets(1)
Set oRange = SourceSheet.Range(SourceSheet.Cells(1, 1), SourceSheet.Cells(1, 1)).CurrentRegion
nMaxRow = oRange.Rows.Count
nMaxCol = oRange.Columns.Count
bookcount=int(nMaxRow/50000)+1
'set RangeArray(0) = SourceSheet.Range(SourceSheet.Cells(1, 1), SourceSheet.Cells(1, nMaxCol))
sExcelApp.Application.DisplayAlerts = False
    For i = 1 To bookcount
if i=bookcount then 
LastRow=nMaxRow
else
LastRow=50000*i
end if
NewFullFileName=left(fullfilepath,len(fullfilepath)-5) & "_" & i & right(fullfilepath,5)
if sFSO.FileExists(NewFullFileName) then 
set sfile=sFSO.GetFile(NewFullFileName)
sfile.delete
end if

'set RangeArray(1) = SourceSheet.Range(SourceSheet.Cells(LastRow-50000+1, 1), SourceSheet.Cells(LastRow, nMaxCol)).Value
Set NewBook = sExcelApp.Workbooks.Add
Set NewSheet = NewBook.worksheets(1)
NewSheet.Range(NewSheet.Cells(1,1), NewSheet.Cells(1, nMaxCol)).value=SourceSheet.Range(SourceSheet.Cells(1, 1), SourceSheet.Cells(1, nMaxCol)).value
NewSheet.Range(NewSheet.Cells(LastRow-50000+1, 2), NewSheet.Cells(LastRow, nMaxCol))=SourceSheet.Range(SourceSheet.Cells(LastRow-50000+1, 1), SourceSheet.Cells(LastRow, nMaxCol)).Value
NewBook.SaveAs (NewFullFileName)
NewBook.Close True
Set NewBook = Nothing
set NewSheet=nothing
Next
ExBook.Close True
If Err.Number = 0 Then Set sfile = sFSO.CreateTextFile(left(fullfilepath,len(fullfilepath)-5) & ".swf", True)
'Wscript.Echo "err:" & Err.Number & left(fullfilepath,len(fullfilepath)-5) & ".swf.txt"
sExcelApp.Application.DisplayAlerts = True
    sExcelApp.Quit
Set sFSO=Nothing
Set sExcelApp=Nothing
set ExBook = Nothing
set sfile=nothing
'**********************************************************************************************************   

Jul 13, 2009

Oracle的Blob bug一例

MSN Chat:
2009-7-13  16:01:09  方蓉  周详珍  你好哦 
2009-7-13  16:01:39  周详珍  方蓉  你好呀~ 
2009-7-13  16:01:52  方蓉  周详珍  请教你个问题哦 
2009-7-13  16:01:57  方蓉  周详珍  :) 
2009-7-13  16:02:27  方蓉  周详珍  就是数据库中的2个实例下的各自的用户之间导数据,但是BLOB型的大数据导不进去 
2009-7-13  16:02:34  方蓉  周详珍  表也属于不同的表空间  
2009-7-13  16:02:44  方蓉  周详珍  这样一般会是什么问题呢? 
2009-7-13  16:10:15  周详珍  方蓉  你的数据库版本, 
2009-7-13  16:10:25  方蓉  周详珍  恩 好的  
2009-7-13  16:10:26  方蓉  周详珍  问问 
2009-7-13  16:10:29  方蓉  周详珍  我问问 
2009-7-13  16:11:25  周详珍  方蓉  你说的两个实例其实是在同一台主机上的两个Database,还是同一个Database下的两个Schema 
2009-7-13  16:11:27  周详珍  方蓉  ? 
2009-7-13  16:11:35  方蓉  周详珍  版本是一样的9.2 
2009-7-13  16:12:02  周详珍  方蓉  oracle9.2.0.1的有这个bug  
2009-7-13  16:12:18  周详珍  方蓉  你详细的版本号是多少? 
2009-7-13  16:13:03  方蓉  周详珍  恩  
2009-7-13  16:13:29  方蓉  周详珍  是我旁边的一个同事让我研究一下这个 
2009-7-13  16:13:36  方蓉  周详珍  我问问他 
2009-7-13  16:13:59  方蓉  周详珍  同一台主机上两个database 
2009-7-13  16:14:14  周详珍  方蓉  还有你是怎么导的?使用什么工具? 
2009-7-13  16:14:52  方蓉  周详珍  他用imp导的 
2009-7-13  16:17:24  周详珍  方蓉  imp/exp应该没有问题的,你搜索下看看Oracle的bug列表看看,貌似这个版本有个bug 
2009-7-13  16:18:43  方蓉  周详珍  恩 好的  
2009-7-13  16:18:51  方蓉  周详珍  我再导一下数据 
2009-7-13  16:18:57  方蓉  周详珍  看看报什么错 
2009-7-13  16:19:04  方蓉  周详珍  在我自己的电脑上实践下  
2009-7-13  16:19:27  方蓉  周详珍  一个数据库下,2个不同实例下的不同用户间导  
2009-7-13  16:19:54  周详珍  方蓉  EXP-00003? 
2009-7-13  16:20:27  周详珍  方蓉  请确认版本和服务器版本一致,不然测试不出来的 
2009-7-13  16:20:41  周详珍  方蓉  你自己电脑上的版本? 
2009-7-13  16:20:56  周详珍  方蓉  刚才这个问题确实是oracle的一个bug 
2009-7-13  16:21:02  方蓉  周详珍  恩 我看看】 
2009-7-13  16:21:20  方蓉  周详珍  恩 我的是 9.2.0.1.0 
2009-7-13  16:21:42  方蓉  周详珍  恩 我先试试 
2009-7-13  16:21:55  周详珍  方蓉  方法1:数据库升级方法2:更改$ORACLE_HOME/rdbms/admin/catexp.sql这个脚本,然后用sys帐号执行该脚本 
2009-7-13  16:21:57  方蓉  周详珍  那还有什么其他方法可以导 
2009-7-13  16:22:18  方蓉  周详珍  可以避免这个错误的? 
2009-7-13  16:22:19  周详珍  方蓉  脚本改成:
CREATE OR REPLACE VIEW exu9tne ( tsno, fileno, blockno, length) AS 
SELECT ts#, segfile#, segblock#, length 
FROM sys.uet$ WHERE ext# = 1   
UNION ALL 
SELECT * from sys.exu9tneb  
2009-7-13  16:22:30  周详珍  方蓉  就可以了。 
2009-7-13  16:22:38  方蓉  周详珍  恩 好的 
2009-7-13  16:22:59  方蓉  周详珍  这边的是装在WINDOWS 2003SERVER上的 
2009-7-13  16:23:24  方蓉  周详珍  好的  
2009-7-13  16:23:25  周详珍  方蓉  那就再对应路径上 
2009-7-13  16:23:28  方蓉  周详珍  我试试 
2009-7-13  16:23:34  方蓉  周详珍  恩 知道了哦  
2009-7-13  16:23:42  方蓉  周详珍  :D 谢谢哦~~~~  

Thanks
Xiangzhen