Page 1 of 1 1
Topic Options
#35440 - 2003-01-21 04:54 PM [Excel] Finding last row & Adding sheet
Y3PP3R Offline
Fresh Scripter

Registered: 2003-01-21
Posts: 6
Hey all,
I'm making a script that reads data from an acces DB and insert it into an excel Workbook.

Now I need to find the last row with data, so I can add new data under existing data, and I want to make a sheet for each different item in a row, called 'objects'. So all records with object 'car' need to be inserted in sheet 'car' and with object 'bike' in sheet 'bike' and so on...

I know how to read and manipulate a database and open an existing file, else create a new one...

Who wants to make me happy?

[ 21. January 2003, 17:00: Message edited by: Jasper Timmer ]

Top
#35441 - 2003-01-21 05:33 PM Re: [Excel] Finding last row & Adding sheet
Shawn Administrator Offline
Administrator
*****

Registered: 1999-08-13
Posts: 8611
Hi Jasper, welcome to korg.

I'm trying to paint a mental picture of what your asking. So a sample of your input would be something like this (using csv just for convience):

"car","ford","blue"
"bike","harley","grey"
"car","honda","silver"
"bike","honda","black"

then you want two xlsheets produced (name in brackets), like this:

[car]

ford,blue
honda,silver

[bike]
harley,grey
honda,black

Plus, these rows will be additive in that you will be appending new rows every time you run the script ?

Top
#35442 - 2003-01-21 05:41 PM Re: [Excel] Finding last row & Adding sheet
Y3PP3R Offline
Fresh Scripter

Registered: 2003-01-21
Posts: 6
You did understand the problem fine!

Additional info: all records that are added to my workbook are deleted, so all data what will be inserted will be new and needs to be under all exitsting rows. The sheets need to have the name of the object...

Top
#35443 - 2003-01-21 05:44 PM Re: [Excel] Finding last row & Adding sheet
Y3PP3R Offline
Fresh Scripter

Registered: 2003-01-21
Posts: 6
I forgot one thing: I can read all the different objects from an other table...
Top
#35444 - 2003-01-21 07:14 PM Re: [Excel] Finding last row & Adding sheet
Breaker Offline
Hey THIS is FUN
*****

Registered: 2001-06-15
Posts: 268
Loc: Yorkshire, England
This scriptlet will add the sheet to your existing workbook. The file "c:\test.xls" needs to exist - no checking.

code:
$objXL = CreateObject("Excel.Application")
$objWorkBook = $objXL.WorkBooks.Open("c:\test.xls")
$objNewSheet = $objWorkBook.Worksheets.Add
$objNewSheet.Name = "New Sheet"
$objXL.Visible = 1
$objXL = 0
Exit

Also you could try looking at the code excerpt I offered in this thread to see how you can reference different cells in Excel - looping through cells, moving between cells, etc.

Hope this helps.

-Breaker
_________________________
================================================
Breaker


Top
#35445 - 2003-01-21 07:48 PM Re: [Excel] Finding last row & Adding sheet
Y3PP3R Offline
Fresh Scripter

Registered: 2003-01-21
Posts: 6
The code (link) you refer to, does nothing with me, only output is a1 at the console

How comes?

Greetz, Y3PP3R

Top
#35446 - 2003-01-22 01:49 PM Re: [Excel] Finding last row & Adding sheet
Breaker Offline
Hey THIS is FUN
*****

Registered: 2001-06-15
Posts: 268
Loc: Yorkshire, England
What version of KiXtart are you using?
_________________________
================================================
Breaker


Top
#35447 - 2003-01-22 06:37 PM Re: [Excel] Finding last row & Adding sheet
Y3PP3R Offline
Fresh Scripter

Registered: 2003-01-21
Posts: 6
I'm using Kix 4.12 and I'd manage to get it working, but the last value it returns is a1.

New question 1: How can I start adding rows under the last row found? Which variable from your example returns the row on which I should start?

New question 2: How can I check if a sheet already exists and add multiple sheets?

I've added my code, so you can see what I've got and what goes wrong.

code:
Global $oXl,$xlRow,$SearcStartRow,$xlHeader

$filename = "c:\werktijdreg\registraties.xls"
$dsn='DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=c:\werktijdreg\werkinfo.mdb'
$sql="Select * FROM Objecten"
$recordset = DBCommand($dsn,$sql)

$oXL = CreateObject("EXCEL.application")

IF EXIST ($filename)
$RC = $oXl.Workbooks.Open($filename)
For $object=0 to ubound($recordset,0)
If $oxl.sheets.name($recordset[$object,0]) = false
$objNewSheet = $objWorkBook.Worksheets.Add
$objNewSheet.Name = $recordset[$object,0]
$array = "Datum", "Naam", "Plaats", "Taken", "Afstand", "Duur"
$oXL.Range("A1:F1").Value = $array
Endif
next

else
$rc = $oXL.Workbooks.Add
For $object=0 to ubound($recordset,1)
$objNewSheet = $objWorkBook.Worksheets.Add
$objNewSheet.Name = $recordset[$object,0]
$array = "Datum", "Naam", "Plaats", "Taken", "Afstand", "Duur"
$oXL.Range("A1:F1").Value = $array
next
ENDIF

$sql="Select * FROM Registraties"
$recordset = DBCommand($dsn,$sql)

if @error = 0
$oXL.Visible = 1

For $row=0 To ubound($recordset,1)
for $column=0 to ubound($recordset,2)
$oXL.Cells(($row+2),$column).Value = $recordset[$row,$column]
Next
Next

$oXL.Range("A1:G1").Font.Bold = 1
$rc = $oXL.Range("A1:G1").EntireColumn.AutoFit

;##loop door colom A om een waarde te vinden##

$objWorksheet = $objWorkbook.ActiveSheet
$objCell = $objWorksheet.Range("a2")

While $objCell.Offset(0,1).Value <> ""
$Value = $objCell.Value
? $Value
$objCell = $objCell.Offset(1,0)
Loop

If Exist($FileName)
$RC = $oXl.ActiveWorkbook.Save
Else
$RC = $oXl.ActiveWorkbook.SaveAs($FileName,-4143,"","",0,0,,,0) ; xlWorkbookNormal = -4143
EndIf


$oXL.UserControl = 1
else
? @error + " / " @serror
endif
exit

;###############################################################
function DBCommand($ConnDSN,$sql)
Dim $objConn, $adStateOpen
dim $Conntimeout, $CmdTimeout
dim $cmdCommand, $rsRecordset
dim $Records, $FinalRecords
dim $adCmdText, $adLockReadOnly, $adOpenStatic
dim $row, $rows, $column, $columns

$ConnDSN=trim($ConnDSN)
if not $ConnDSN
exit 87
endif
$sql=trim($sql)
if not $sql
exit 87
endif

$adStateOpen=1
$ConnTimeout=15
$CmdTimeout=30
$adCmdText = 1
$adOpenStatic = 3
$adLockReadOnly = 1

; open the database connection
$objConn = CreateObject("ADODB.Connection")
if @ERROR
exit @ERROR
endif
$objConn.ConnectionTimeout = $ConnTimeout
if @ERROR
exit @ERROR
endif
$objConn.CommandTimeout = $CmdTimeout
if @ERROR
exit @ERROR
endif
$objConn.Open($ConnDSN)
if @ERROR
exit @ERROR
endif
if not $objConn.State=$adStateOpen
$objConn=''
$DBCommand=''
exit @ERROR
endif

; create the database command object
$cmdCommand = CreateObject('ADODB.Command')
if @ERROR
exit @ERROR
endif
$cmdCommand.ActiveConnection = $objConn
if @ERROR
exit @ERROR
endif
$cmdCommand.CommandType = $adCmdText
if @ERROR
exit @ERROR
endif
$cmdCommand.CommandText = $sql
if @ERROR
$DBCommand=@ERROR
exit @ERROR
endif

if instr($sql,'SELECT')=1
; return a recordset

; create the recordset object
$rsRecordSet = CreateObject('ADODB.Recordset')
if @ERROR
exit @ERROR
endif
$rsRecordset.CursorType = $adOpenStatic
if @ERROR
exit @ERROR
endif
$rsRecordset.LockType = $adLockReadOnly
if @ERROR
exit @ERROR
endif
$rsRecordset.Open($cmdCommand)
if @ERROR
exit @ERROR
endif

if $rsRecordset.EOF and $rsRecordSet.BOF
; recordset is empty
$FinalRecords=''
else
if @ERROR
exit @ERROR
endif

; retrieve all records at once and transpose into tabular format
$Records = $rsRecordset.GetRows()
$columns=ubound($records,1)
$rows=ubound($records,2)
redim $FinalRecords[$rows,$columns]
for $row=0 to $rows
for $column=0 to $columns
$FinalRecords[$row,$column]=$records[$column,$row]
next
next
endif

; close recordset
if $rsRecordset.state=$adStateOpen
$rsRecordset.Close()
if @ERROR
exit @ERROR
endif
endif

$rsRecordset=''
$cmdCommand=''

$DBCommand=$FinalRecords
else
$rsRecordset=$cmdCommand.Execute()
$cmdCommand=''
$rsRecordset=''
if @ERROR
exit @ERROR
endif

$DBCommand=0
endif

; close the database connection
If $objConn.State = $adStateOpen
$objConn.Close()
if @ERROR
exit @ERROR
endif
EndIf
$objConn=''

exit 0
endfunction



[ 22. January 2003, 18:47: Message edited by: Jasper Timmer ]

Top
#35448 - 2003-01-22 11:29 PM Re: [Excel] Finding last row & Adding sheet
Sealeopard Offline
KiX Master
*****

Registered: 2001-04-25
Posts: 11164
Loc: Boston, MA, USA
What you are trying to do is better suited for a database. Why do you need to do this in Excel and not in Access?
_________________________
There are two types of vessels, submarines and targets.

Top
#35449 - 2003-01-23 04:28 PM Re: [Excel] Finding last row & Adding sheet
Y3PP3R Offline
Fresh Scripter

Registered: 2003-01-21
Posts: 6
It's for a company that uses an excelsystem, which works fine and they don't want a new system. Now they have to type in all the data from notes, but I made a pocketpc program which collects data from all of the workers, but it needs to be exported to excelsheets, sorted by object(sheets). That's the way they did it at that's the way they want it [Frown]

[ 23. January 2003, 16:31: Message edited by: Jasper Timmer ]

Top
Page 1 of 1 1


Moderator:  Jochen, Allen, Radimus, Glenn Barnas, ShaneEP, Ruud van Velsen, Arend_, Mart 
Hop to:
Shout Box

Who's Online
0 registered and 569 anonymous users online.
Newest Members
Timothy, Jojo67, MaikSimon, kvn317, kixtarts2025
17874 Registered Users

Generated in 0.145 seconds in which 0.11 seconds were spent on a total of 12 queries. Zlib compression enabled.

Search the board with:
superb Board Search
or try with google:
Google
Web kixtart.org