Use the File commands in Python™ to manipulate Excel, CSV, TAB, and other text file types - even when Microsoft Excel is not installed. Only one workbook can be open at a time.
For situations where a script is constantly running - such as polling a data source for new information every few minutes - you can use the GS Console Manager module to launch and/or monitor the progress of such scripts.
See Python commands for other commands you can use with GainSeeker.
Contents [Hide] |
Syntax |
Example |
Description/Remarks |
New or changed in GainSeeker version |
file.delete(filepath) |
file.delete("myfile.txt") |
Deletes the file if it exists. |
|
file.exists(filepath) |
file.exists("myfile.txt") |
Returns True if the file exists, or False if it does not. |
|
print file.getpath(11) Prints the application installation path to the console. |
Returns the requested path as a string: 0: SPC Standards 1: SPC Data 2: DMS Standards 3: DMS Data 4: Archive Data 5: User Documents 1 6: Traceability 7: SPC Templates 8: Import/Export 9: User Documents 2 10: Configuration Data 11: Application Path 12: Settings.hsi path 13: Cms.ini path (the windows path). 14: Windows temp path
|
|
|
print file.getuserdoc1() Prints to the console the User Documents 1 path. |
Returns the full User Documents 1 path as a string. The user documents 1 (or 2) path can be set on the Tables dialog in the System Administration module. |
|
|
file.getuserdoc2() |
print file.getuserdoc2() Prints to the console the User Documents 2 path. |
Returns the full User Documents 2 path as a string. The user documents 1 (or 2) path can be set on the Tables dialog in the System Administration module. |
|
print file.getvalidfilename("yield<90?") Strips out invalid filename characters < and ? and prints to the console the valid filename "yield90". |
Returns the given filename after removing all invalid filename characters ( < > : " / \ | ? * ). filename must not include a path, as the path characters : and \ are not valid in filenames. |
9.4.1 |
Syntax |
Example |
Description/Remarks |
New or changed in GainSeeker version |
file.text.readall(filepath) |
file.text.readall("myfile.txt") |
Reads and returns the contents of a text file as a string. |
|
file.text.readlines(filepath) |
file.text.readlines("myfile.txt") |
Reads the contents of a text file and then returns a list of strings, one for each line in the file. |
|
file.text.write(filepath, contents, append) |
file.text.write("myfile.txt", "Hello", True) This appends the string "Hello" to the file "myfile.txt". |
Writes a string to a file. When append is True, the file is appended to rather than written over. |
|
file.text.writelines(filepath, lines, append) |
contents = ["Hello", "Goodbye"] file.Text.writelines("myfile.txt", contents, True) This appends the lines "Hello" and "Goodbye" to the file "myfile.txt". |
Writes a list of strings to a file, each as its own line. When append is True, the file is appended to rather than written over. |
|
Syntax |
Example |
Description/Remarks |
New or changed in GainSeeker version |
file.xls.addpicture("A1", "H16", "P:\\images\\example.jpg") |
Adds an image to an Excel file. startname and endname are formatted like "A1" and specify where the upper left and lower right corners of the image should be placed. filename specifies the image file to add to the Excel file. Valid file types are .bmp, .gif, .jpg, .png, and .tiff. |
8.8 |
|
file.xls.addpicture(startrow, startcolumn, endrow, endcolumn, filename) |
file.xls.addpicture(0, 0, 7, 16, "P:\\images\\example.jpg") |
Adds an image to an Excel file. Row and column numbers begin counting at 0. They specify where the upper left and lower right corners of the image should be placed. filename specifies the image file to add to the Excel file. Valid file types are .bmp, .gif, .jpg, .png, and .tiff. |
8.8 |
file.xls.autosizecolumn(column) |
file.xls.autosizecolumn(0) |
Automatically sizes the specified column based on the column's current contents. Column numbering starts at 0. |
8.8 |
file.xls.autosizecolumn(columnName) |
file.xls.autosizecolumn("A") |
Automatically sizes the specified column based on the column's current contents. Column names are the letters typically used in spreadsheets, such as "A" or "BC". |
8.8 |
file.xls.calculate() |
file.xls.calculate() |
Calculates Excel formulas. You may need to execute this method when you update cell values after setting formulas, and you want the formulas to update. All formulas are evaluated when a file is read into memory. |
|
file.xls.clear() |
Clears the current workbook. |
|
|
file.xls.read(f:\\temp\\report.xlsx) file.xls.sheetidx = 2 file.xls.clearworksheet() file.xls.write(f:\\temp\\cleaned.xlsx) This reads the file, goes to the 3rd worksheet, clears that worksheet, and writes out the results to a different file. |
Clears the current worksheet. For information on setting the current worksheet, see file.xls.sheetidx. |
8.9 |
|
file.xls.columncnt |
|
Deprecated - use file.xls.lastcol instead. |
|
numcols = file.xls.columncount |
Gets the number of columns in the file. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
8.7 |
|
file.xls.getcell("A3", True) |
Returns the value of a cell given its name (for example: "F14" or "A3"). When isNumeric is True, the value is returned as a number. When isNumeric is False, the value is treated as text. (When reading a .csv file, if the cell can be interpreted as a numeric value, its value will be formatted without any symbols such as currency, percent, or scientific notation.) This does not return datetime cells correctly. Use the getcelldt command to get datetime cells. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
9.3 |
|
file.xls.getcell(row, column, isNumeric) |
file.xls.getcell(1, 2, False) |
Returns the value of a cell given the row and column. When isNumeric is True, the value is returned as a number. When isNumeric is False, the value is treated as text. (When reading a .csv file, if the cell can be interpreted as a numeric value, its value will be formatted without any symbols such as currency, percent, or scientific notation.) This does not return datetime cells correctly. Use the getcelldt command to get datetime cells. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
9.3 |
print file.xls.getcelldt("B1", True, False) This retrieves the date from the cell with name "B1". |
Returns the date and/or time as a string from a date or time cell with the specified name. The hasdate argument specifies that there is a date component in the cell, The hastime argument specifies that there is a time component in the cell. (When reading a .csv file, time stamps do not include seconds.) Note that file.xls.setcell() cannot be used to set datetime cells. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
|
file.xls.getcelldt(row, column, hasdate, hastime) |
print file.xls.getcelldt(0, 1, False, True) This retrieves the time from the cell at row 0, column 1. |
Returns the date and/or time as a string from a date or time cell with the specified row and column. The hasdate argument specifies that there is a date component in the cell, The hastime argument specifies that there is a time component in the cell. (When reading a .csv file, time stamps do not include seconds.) Note that file.xls.setcell() cannot be used to set datetime cells. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.getcolumn(index, isnumeric, startrow, endrow) |
print file.xls.getcolumn(1, False, 0, 99) This prints to the console a list of the first 100 rows in the spreadsheet for the second column. |
Returns a list of cell values, one for each cell in a column at the specified index from the startrow to the endrow. Setting isnumeric to True parses each cell as a number, or None if an invalid number. This does not return datetime columns correctly. Use the getcolumndt command to get datetime columns. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.getcolumn(name, isnumeric, startrow, endrow) |
print file.xls.getcolumn("B", False, 0, 99) This prints to the console a list of the first 100 rows in the spreadsheet for the column named "B" in Excel. |
Returns a list of cell values, one for each cell in a column with the specified name from the startrow to the endrow. Setting isnumeric to True parses each cell as a number, or None if an invalid number. This does not return datetime columns correctly. Use the getcolumndt command to get datetime columns. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.getcolumndt(index, hasdate, hastime, startrow, endrow) |
print file.xls.getcolumndt(1, True, False, 0, 99) This prints to the console a list of the first 100 rows in the spreadsheet for the second column. This assumes the column has a date, but no time component. |
Returns a list of cell values, one for each cell in a column with the specified index from the startrow to the endrow. Set hasdate to True when the column has a date component, set hastime to True when the column has a time component. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.getcolumndt(name, hasdate, hastime, startrow, endrow) |
print file.xls.getcolumndt("B", False, True, 0, 99) This prints to the console a list of the first 100 rows in the spreadsheet for the second column. This assumes the column has a time, but no date component. |
Returns a list of cell values, one for each cell in a column with the specified name from the startrow to the endrow. Set hasdate to True when the column has a date component, set hastime to True when the column has a time component. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.getrow(0) Returns a list of cell values in the 1st row of the spreadsheet. |
Returns a list of cell values as text, one for each cell in the specified row. Row numbering starts at 0. When reading a .csv file, if the cell can be interpreted as a numeric value, its value will be formatted without any symbols such as currency, percent, or scientific notation. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
9.3 |
|
Allows direct access to spreadsheet internal features for advanced usage. See details and examples below. |
|
||
Gets the zero-based number of the last column that is not empty. Returns -1 if there are no columns. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
8.7 |
||
Gets the zero-based number of the last row that is not empty. Returns -1 if there are no rows. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
8.7 |
||
file.xls.read(filename) |
file.xls.read("f:\\logs\\datalog.xlsx") |
Reads the specified file as a workbook. This includes Excel files or delimited text files such as CSV or TAB. All formulas are evaluated when a file is read. Returns True if file is opened successfully. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.readdelim |
file.xls.readdelim = ',' |
Gets or sets the delimiting character for reading delimited text files. This usually is a comma or a tab ('\t'). This is used for any file that does not have an extension of .xls or .xlsx. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
|
file.xls.rowcnt |
|
Deprecated - use file.xls.lastrow instead. |
|
numrows = file.xls.rowcount |
Gets the number of rows in the file. This command may not work correctly if the file contains an ASCII null character. For a workaround, see ASCII null character in text files. |
8.7 |
|
file.xls.setcell(cellname, value, isNumeric) |
file.xls.setcell("B1", "some text", False) |
Sets the value of a cell given its name (for example: "F14" or "A3"). The value can be a number or a string, but isNumeric must be set accordingly. (Cannot be used to set datetime cells.) |
|
file.xls.setcell(row, column, value, isNumeric) |
file.xls.setcell(2, 5, 45, True) |
Sets the value of a cell given row and column numbers. The value can be a number or a string, but isNumeric must be set accordingly. (Cannot be used to set datetime cells.) |
|
file.xls.setcellborder(name, topcolor=None, bottomcolor=None, leftcolor=None, rightcolor=None, type=2) |
file.xls.setcellborder("A1", "DarkBlue", "DarkBlue", "DarkBlue", "DarkBlue", 5) |
Sets the borders of a cell given its name (for example: "F14" or "A3"). To set the color, specify its colorname. (For a full list of colornames - such as "red", "orange", "yellow", "green", "blue", "white", and many more - see https://www.colorcodehex.com/html-color-names.html or http://cng.seas.rochester.edu/CNG/docs/x11color.html.) Options for type are: 13 : SlantedDashDot 12 : MediumDashDotDot 11 : DashDotDot 10 : MediumDashDot 9 : DashDot 8 : MediumDash 7 : Hair 6 : Double 5 : Thick 4 : Dotted 3 : Dashed 2 : Medium 1 : Thin 0 : None |
8.8 |
file.xls.setcellborder(row, column, topcolor=None, bottomcolor=None, leftcolor=None, rightcolor=None, type=2) |
file.xls.setcellborder(0, 0, "DarkBlue", "DarkBlue", "DarkBlue", "DarkBlue", 5) |
Sets the borders of a cell given row and column numbers, both of which start numbering at 0. See above for color and type details. |
8.8 |
file.xls.setcellfont(name, color='black', size=10, bold=False, italic=False, orientation=0) |
file.xls.setcellfont("A1", "DarkBlue", 14, True, True) |
Sets the font for a cell given its name (for example: "F14" or "A3"). To set the color, specify its colorname. (For a full list of colornames - such as "red", "orange", "yellow", "green", "blue", "white", and many more - see https://www.colorcodehex.com/html-color-names.html or http://cng.seas.rochester.edu/CNG/docs/x11color.html.) Options for orientation are: 0 : Normal 1 : Clockwise 2 : Counter-clockwise |
8.8 |
file.xls.setcellfont(row, column, color='black', size=10, bold=False, italic=False, orientation=0) |
file.xls.setcellfont(0, 0, "DarkBlue", 14, True, True) |
Sets the font for a cell given row and column numbers, both of which start numbering at 0. See above for color and font details. |
8.8 |
file.xls.setcolumnwidth(column, width=8) |
file.xls.setcolumnwidth(0, 16) |
Sets the width of the specified column. Width number represents the approximate number of 0's that will fit in the column. Default width is 8. Setting width to 0 will hide the column. Column numbering starts at 0. |
8.8 |
file.xls.setcolumnwidth(columnName, width=8) |
file.xls.setcolumnwidth("A", 16) |
Sets the width of the specified column. Width number represents the approximate number of 0's that will fit in the column. Default width is 8. Setting width to 0 will hide the column. Column names are the letters typically used in spreadsheets, such as "A" or "BC". |
8.8 |
file.xls.setformula(cellname, value) |
file.xls.setformula("C2", "A1+B1") |
Sets the formula of a cell given its formatted name (for example: "F14" or "A3"). The formula must be a string and it cannot begin with the equal sign (=). The formula is calculated when it is set. |
|
file.xls.setformula(row, column, value) |
file.xls.setformula(3, 4, "A1+B1") |
Sets the formula of a cell given row and column numbers. The formula must be a string and it cannot begin with the equal sign (=). The formula is calculated when it is set. |
|
file.xls.setrangeborder(startname, endname, topcolor=None, bottomcolor=None, leftcolor=None, rightcolor=None, type=2) |
file.xls.setrangeborder("A1", "H16", "DarkBlue", "DarkBlue", "DarkBlue", "DarkBlue", 5) |
Sets the border for a range of cells. startname and endname are formatted like "A1" and specify the upper left and lower right corners of the range of cells. To set the color, specify its colorname. (For a full list of colornames - such as "red", "orange", "yellow", "green", "blue", "white", and many more - see https://www.colorcodehex.com/html-color-names.html or http://cng.seas.rochester.edu/CNG/docs/x11color.html.) Options for type are: 13 : SlantedDashDot 12 : MediumDashDotDot 11 : DashDotDot 10 : MediumDashDot 9 : DashDot 8 : MediumDash 7 : Hair 6 : Double 5 : Thick 4 : Dotted 3 : Dashed 2 : Medium 1 : Thin 0 : None |
8.8 |
file.xls.setrangeborder(startrow, startcolumn, endrow, endcolumn, topcolor=None, bottomcolor=None, leftcolor=None, rightcolor=None, type=2) |
file.xls.setcellborder(0, 0, 7, 16, "DarkBlue", "DarkBlue", "DarkBlue", "DarkBlue", 5) |
Sets the border for a range of cells. Row and column numbers begin counting at 0. They specify the upper left and lower right corners of the range of cells. See above for color and type details. |
8.8 |
file.xls.setrangefont(startname, endname, color='black', size=10, bold=False, italic=False, orientation=0) |
file.xls.setrangefont("A1", "H16", "DarkBlue", 14, True, True) |
Sets the font for a range of cells. startname and endname are formatted like "A1" and specify the upper left and lower right corners of the range of cells. To set the color, specify its colorname. (For a full list of colornames - such as "red", "orange", "yellow", "green", "blue", "white", and many more - see https://www.colorcodehex.com/html-color-names.html or http://cng.seas.rochester.edu/CNG/docs/x11color.html.) Options for orientation are: 0 : Normal 1 : Clockwise 2 : Counter-clockwise |
8.8 |
file.xls.setrangefont(startrow, startcolumn, endrow, endcolumn, color='black', size=10, bold=False, italic=False, orientation=0) |
file.xls.setrangefont(0, 0, 7, 16, "DarkBlue", 14, True, True) |
Sets the font for a range of cells. Row and column numbers begin counting at 0. They specify the upper left and lower right corners of the range of cells. See above for color and font details. |
8.8 |
file.xls.setsheetbyname("Monthly Summary") |
Makes the sheet with the specified name the current sheet. Returns True if successful and False otherwise. |
9.4.1 |
|
file.xls.sheetcnt |
Gets the number of sheets in a workbook. |
|
|
Gets or Sets the index of the current sheet, zero being the first sheet. |
|
||
mycurrentsheet = file.xls.sheetname |
Returns the name of the current sheet in the workbook. |
|
|
file.xls.write(filename) |
file.xls.write("myfile.xlsx") |
Writes the specified file as a workbook. This includes Excel, CSV, or TAB files. |
|
This reads in the Excel file "myworkbook.xls", sets the number of sheets to the variable sheetcnt, and sets the current sheet to the first sheet.
file.xls.read("myworkbook.xls")
sheetcnt = file.xls.sheetcnt
file.xls.sheetidx = 0
This prints the number of non-empty rows and columns to the console.
print file.xls.lastrow + 1
print file.xls.lastcol + 1
This sets the value of the cell B2 to 123.4 and the cell in the third column and third row (C3) to "XYZ".
file.xls.setcell("B2", 123.4, True)
file.xls.setcell(2, 2, "XYZ", False)
This writes the contents of the current workbook to "mycsv.csv" and then clears the current workbook.
file.xls.write("mycsv.csv")
file.xls.clear()
There are several Python commands that you can use to format an Excel file, such as:
file.xls.setcolumnwidth and file.xls.autosizecolumn
file.xls.setcellfont and file.xls.setrangefont
file.xls.setcellborder and file.xls.setrangeborder
file.xls.addpicture
However, you may find the following steps to be much easier:
Use Excel to create a new Excel spreadsheet and format it as desired.
Use standard Python commands to make a copy of that formatted Excel file.
Use GainSeeker Python commands above to open your new copy of the formatted Excel file, insert new values (from your GainSeeker data or from other sources), and provide any final formatting such as auto-sizing columns to make sure that all information is visible.
Some devices or other systems may create a .csv or other text file that contains the ASCII null character (ASCII character 0). In this type of file, the file.xls commands can only read the file contents up to that character.
If you know that your text files may contain this ASCII null character, you can first use the file.text commands to replace ASCII null character with an empty string (nothing) and write the revised contents to file. Then you can use the file.xls commands to read the contents of the corrected file.
Here is some sample code:
#This file contains
an ASCII null character (ASCII 0).
#The file.xls commands can only read contents up to that ASCII null.
file1 = "c:\\myfile.csv"
#This file will
contain the original contents of file1 with any ASCII null characters
stripped out.
#The file.xls commands
will be able to read the full contents of this file.
file2 = "c:\\myfile2.csv"
orig_content = file.text.readall(file1)
new_content = orig_content.replace(chr(0), '')
file.text.write(file2, new_content, False)
The file.xls Python commands use SmartXLS component software to manipulate Excel files.
In addition to the commands listed above, you can use the file.xls.internal command to directly access all of the SmartXLS functions.
Code samples for these functions are available on www.smartxls.com/sample-list.htm.
Here is an example of the provided VB.Net code to set cell alignments, and a GainSeeker Python script that uses equivalent code.
VB.Net code:
Dim rangeStyle As RangeStyle
rangeStyle = workBook.getRangeStyle(1, 1, 2, 2) 'get format from range B2:C3
rangeStyle.HorizontalAlignment = rangeStyle.HorizontalAlignmentRight
'rangeStyle.Indent = 5;
rangeStyle.VerticalAlignment = rangeStyle.VerticalAlignmentCenter
workBook.setRangeStyle(rangeStyle, 1, 1, 2, 2) 'set format for range B2:C3
Python code:
file.xls.read(r"c:\path\myworkbook.xls")
rangeStyleObj = file.xls.internal.getRangeStyle(1, 1, 2, 2) #get format from range B2:C3
rangeStyleObj.HorizontalAlignment = rangeStyleObj.HorizontalAlignmentRight
#rangeStyleObj.Indent = 5 ##if desired, you can also set an indent of 5
rangeStyleObj.VerticalAlignment = rangeStyleObj.VerticalAlignmentCenter
file.xls.internal.setRangeStyle(rangeStyleObj, 1, 1, 2, 2) #set format for range B2:C3
file.xls.write(r"c:\path\anotherworkbook.xls")
Notes:
Cells are addressed as zero-based pairs of row number, column number. For example, cell A100 is 99,0.
You can check the value of a setting by printing it; for example:
rangeStyleObj.HorizontalAlignment
= rangeStyleObj.HorizontalAlignmentRight
print rangeStyleObj.HorizontalAlignmentRight #returns the integer 3
This means that the following lines of code are equivalent:
rangeStyleObj.HorizontalAlignment
= rangeStyleObj.HorizontalAlignmentRight
rangeStyleObj.HorizontalAlignment = 3
When you use Excel's Format Cells window to change the horizontal alignment of cells, the order of the Horizontal list items corresponds to the SmartXLS settings.
rangeStyleObj.HorizontalAlignment = 0 #General
rangeStyleObj.HorizontalAlignment = 1 #Left (Indent)
rangeStyleObj.HorizontalAlignment = 2 #Center
rangeStyleObj.HorizontalAlignment = 3 #Right (Indent)
rangeStyleObj.HorizontalAlignment = 4 #Fill
#etc.
So even if you can't find the SmartXLS documentation for a particular setting, you may be able to infer its equivalent numeric value by printing another option in the same class of settings and comparing that to the corresponding list in Excel.
For reference, here are some additional functions that can be performed via file.xls.internal commands:
file.xls.internal.getText(0, 0) #gets text value of cell; equivalent to file.xls.getcell(0, 0, False)
file.xls.internal.getNumber(0, 0) #gets numeric value of cell; equivalent to file.xls.getcell(0, 0, True)
file.xls.internal.getFormula(0, 0) #gets cell's formula
Syntax |
Example |
Description/Remarks |
New or changed in GainSeeker version |
file.exceltopdf("q:\\docs\\myfile.xlsx", "h:\\daily\\report.pdf", "L", True) Uses Microsoft Excel to open the file "q:\docs\myfile.xlsx" and save all worksheets to a .pdf file named "h:\daily\report.pdf", using Landscape orientation. |
Creates a .pdf file from an Excel file. Requires Microsoft Excel 2007 or later to be installed. excelfile is the path and filename of the Excel file. The filename extension .xls or .xlsx is required. pdfpath is the path and filename of the .pdf file. The filename extension .pdf is required. If this file already exists, it will be overwritten. settings determines the how pages are oriented in the .pdf file. Specify P (portrait), L (landscape), or an empty string (orientation configured in the Excel file). allsheets can be True (save all worksheets to pdf) or False (save only the active sheet(s) to pdf). If Excel is not installed or excelfile cannot be found, the resulting pdf file will contain an error message instead of the Excel file contents. Error messages displayed by Microsoft Excel cannot be suppressed with error.stoponerror = False . |
8.9 |
|
file.htmltopdf("q:\\docs\\myfile.html", "h:\\daily\\report.pdf", "L") Saves the file "q:\docs\myfile.html" to a .pdf file named "h:\daily\report.pdf", using Landscape orientation and paper size Letter (8.5 x 11 inches).
file.htmltopdf("<p>Here is some text.</p>", "h:\\daily\\report.pdf", 'P -s A4 --header-right "Page [page] of [toPage]"') Saves the specified fragment of HTML to a .pdf file named "h:\daily\report.pdf", using Portrait orientation, paper size A4, and a header for page numbers. |
Creates a .pdf file from HTML, using wkhtmltopdf.exe in the GainSeeker application folder. html can be either of these:
pdfpath is the path and filename of the .pdf file. The filename extension .pdf is required. If this file already exists, it will be overwritten. settings is a string that can include two types of parameters:
This Python command will generate .pdf files with paper size Letter (8.5 x 11 inches) unless you use the settings parameter to specify a different paper size. |
8.9 |