Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Best way to re-factor
Message
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01135774
Message ID:
01135791
Views:
20
>To make it to work without needs to rewrite other modules where this procedure is called you could add two parameters:
>one Logical (which by default is .f.) and one which will shows you colums you need for different formating and what format, i.e.
>
>If Function/Method till now is:
>
>FUNCTION MyExcelFormat(par1, par2,..,parN)
>
>
>you could change it to:
>
>FUNCTION MyExcelFormat(par1, par2,..,parN,parN+1,parN+2 )
>*** Old function body goes here
>        IF parN+1 && Logical Parameter, from all other moduls this will be .f.
>           *** put formating logixc here
>        ENDIF
>
>
>I can't remeber now that function
>BUT I remeber that you found something in Excel that suppress Excel to use Regional settings of the computer.

The second parameter is unclear. I was thinking about passing n as number of the cell to start applying additional formatting and then color. However, colors in Excel seem to be represented by some numbers.

Here is what I get in my macro:
Range("N4:W4").Select

    Application.CutCopyMode = False

    With Selection.Font

        .Name = "Tahoma"

        .FontStyle = "Bold"

        .Size = 11

        .Strikethrough = False

        .Superscript = False

        .Subscript = False

        .OutlineFont = False

        .Shadow = False

        .Underline = xlUnderlineStyleNone

        .ColorIndex = 5

    End With

    With Selection.Interior

        .ColorIndex = 33

        .Pattern = xlSolid

        .PatternColorIndex = xlAutomatic

    End With
And here is the function's code:
************************************************************
*  FUNCTION DBFToExcel()
************************************************************
*  Author............: VCS  Developers Team (Nadya Nosonovsky)
*  Project...........: Visual Collections System
*  Created...........: 03/03/2006  10:05:42
*  Copyright.........: (c) Jzanus, 2006
*) Description.......: Creates an Excel file from open table / cursor
*  Calling Samples...: DbfToExcel(m.lcXLSFile, @laHeader_Info, "Batch Statistics")
*  Parameter List....: tcXLSFileName, taHeader_Info, tcTitle, tcPassword
*  Major change list.:
function DBFToExcel
lparameters tcXLSFileName, taHeader_Info, tcTitle, tcPassword
external array taHeader_Info
* This function assumes, that the output table (cursor) is currently opened
*-- Generate output to XLS File

local loExcel, lnI, loSheet, lnK, lcError, lnLines
lcError = ""

local array laTitle[1]
lnLines = alines(laTitle, m.tcTitle)

#include Excel.h
#define xlPart   2

*-- Add Header into XLS File
try
	copy to (m.tcXLSFileName) type xl5
*-- Create Ole Automation with Excel
	loExcel=createobject("Excel.Application")
*-- Open XLS File
	loExcel.application.WorkBooks.open(m.tcXLSFileName)
	loExcel.DisplayAlerts = .f.

	for lnI = 1 to loExcel.application.application.WorkBooks(1).Sheets.count
*-- Select individual sheets from open XLS File
		loSheet = loExcel.application.application.WorkBooks(1).Sheets(m.lnI)

** Delete the column headers from Excel (first row)
		loSheet.rows("1").delete(xlShiftDown)

** Insert lines with Title + 2 empty rows for the column headers
		loSheet.rows("1:"+ alltrim(str(m.lnLines + 2))).insert(xlShiftDown)
		with loSheet.range("1:" + alltrim(str(m.lnLines))).font
			.color = 8388736 && rgb(255,0,0)
			.size  = 14
			.Bold  = .t.
			.name = 'Tahoma'
		endwith

		with loSheet.range(alltrim(str(m.lnLines + 1)) + ;
				":" + alltrim(str(m.lnLines + 2))).font
*  .Color = Rgb(255,0,0)
			.size  = 11
			.Bold  = .t.
			.name = 'Tahoma'
		endwith

*!*			With loSheet.Range("1:2").Borders
*!*			  .Weight = xlMedium
*!*			  .LineStyle = xlContinuous
*!*			 Endwith
		for lnK = 1 to m.lnLines
			loSheet.Cells(m.lnK, 1).value = laTitle[m.lnK]
		next

		for lnK = 1 to alen(taHeader_Info,1)
			loSheet.Cells(2 + m.lnLines, m.lnK).value = taHeader_Info[m.lnK,1] + ;
				iif(empty(taHeader_Info[m.lnK,2]), "", ;
				chr(10) + taHeader_Info[m.lnK,2])
*			loSheet.Cells(3 + m.lnLines,m.lnK).value = taHeader_Info[m.lnK,2]

			if !empty(taHeader_Info[m.lnK,3]) && There is format information
				loRange = loSheet.UsedRange.Offset(m.lnLines + 2,0) && we don't want to apply format for header rows
				loRange.columns[m.lnK].NumberFormat = taHeader_Info[m.lnK,3]
			endif

			if !empty(taHeader_Info[m.lnK,4]) && There is Column Width
				loSheet.columns[m.lnK].select
				loSheet.columns[m.lnK].columnwidth = taHeader_Info[m.lnK,4]
			endif
		next
	next

** Made the Totals row in bold and Green highlight
	loExcel.range([A1], loExcel.selection.SpecialCells(xlLastCell)).select
	loExcel.selection.FormatConditions.delete
	loExcel.selection.FormatConditions.add(xlExpression,, '=UPPER(Left($A1,5))="TOTAL"')

	with loExcel.selection.FormatConditions(1)
		.font.Bold = .t.
		.Interior.ColorIndex = 4
	endwith

	if not empty(m.tcPassword)
		loExcel.ActiveWorkbook.password = m.tcPassword && Works in Excel 2003
	endif
	loExcel.save()

catch to loError
	lcError = Log_Error(m.loError)
finally
	if vartype(m.loExcel) = 'O'
		loExcel.DisplayAlerts = .t. && Restore back
		loExcel.quit
	endif
endtry

if not empty(m.lcError)
	=ErrorMsg(m.lcError)
endif

return m.lcError
endfunc
BTW, I was just thinking, I do not need to restore DisplayAlerts back, do I?
If it's not broken, fix it until it is.


My Blog
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform