The initial equals sign tells Excel that this is a formula
!Welcome to your ''tiddlyspot.com'' ~TiddlyWiki!\n''[[tiddlyspot.com|http://tiddlyspot.com]]'' gives you an instant [[TiddlyWiki|http://tiddlywiki.com]] hosted on our ''tiddlyspot.com'' servers.\n\nWant to work online? No problem, you can go to your ''tiddlyspot.com'' URL (which is http://tiddlyspot.com/exceltraining/ ) and start editing. Click "save to web" and your changes are saved directly to your ''tiddlyspot.com'' home -- no messing about with local files or ftp.\n\nWant to work offline? No problem, your ''tiddlyspot.com'' ~TiddlyWiki is a real, fully functioning ~TiddlyWiki that you can save onto your hard drive or USB stick. Use the link below to save to your local computer. As you make changes, use the "save to disk" button to save to your local file. Whenever you're ready to sync up again, just click "save to web".\n\n!To save online\nEnter the upload password provided when you created your ~TiddlyWiki. Then click the "save to web" button below (or in the right side column) to save your ~TiddlyWiki.\nUpload Password: <<option pasUploadPassword>>\n<<upload http://tiddlyspot.com/exceltraining/store.cgi index.html . . exceltraining>>\n\n!To save offline\nTo take this ~TiddlyWiki offline, click [[Download|http://tiddlyspot.com/?action=download&site=exceltraining]]. Save the file locally then open it in your browser.\n\n\n!Learn more about ~TiddlyWiki\nFind out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki.\n\nThe [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]] is an excellent place to ask questions and get help.\n\n!Enjoy!\nWe hope you like using your ''tiddlyspot.com'' ~TiddlyWiki. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments.\n\n----
The dollar sign (''$'') might be new to you. \nInside a cell reference like this, the dollar sign tells Excel to not fiddle with the next bit of the reference. \n\nIn Excel parlance, that makes the row component ''"absolute"''. If we say ''"$E$1"'' then the entire cell reference is absolute. The opposite of absolute is ''"relative"''; ''E1'' is a relative reference, ''$E1'' has an absolute column but a relative row, and ''$E$1'' is an absolute reference. \n
config.options.chkHttpReadOnly = false;\n
#Set up the database\n##The first row ''(A1:D1)'' has headings.\n##Subsequent rows contain data.\n##There are ''no blank rows'' within the database.\n##There is a blank row at the ''end of the database'', and a blank column at the ''right''.\n#Set up the Criteria Range (optional)\nIn the criteria range, you can set the rules for the data that should remain visible after the filter is applied. You can use one criterion, or several.\n##In this example, cells ''F1:F2'' are the //criteria range//.\n##The heading in ''F1'' exactly matches a heading ''(D1)'' in the database.\n##Cell ''F2'' contains the criterion. The //>// (greater than) operator is used, with the number ''500'' (no $ sign is included).\nAfter the filter is applied, orders with a total greater than $500 will remain visible.\nOther operators include:\n*< less than\n*<= less than or equal to\n*>= greater than or equal to\n*<> not equal to\n3. Set up the Extract Range (optional)\nIf you plan to copy the data to another location, you can specify the columns that you want to extract. If you want to extract ALL columns, you can leave the extract range empty.\n##Select the cell at the top left of the range for the extracted data.\n##Type the headings for the columns that you want to extract. These must be an exact match for the column headings, in spelling and punctuation. The column order can be different, and any or all of columns can be included.\n4. Apply the Filter\n##Select a cell in the database.\n##From the Data menu, choose Filter, Advanced Filter.\n##You can choose to filter the list in place, or copy the results to another location.\n##Excel should automatically detect the list range. If not, you can select the cells on the worksheet.\n##Select the criteria range on the worksheet\n##If you are copying to a new location, select a starting cell for the copy. ''Note: If you copy to another location, all cells below the extract range will be cleared when the Advanced Filter is applied''\n##Click OK\n
|Addition|=F1+F2+F3|\n|Subtraction|=F1 -F2|\n|Multiplication|=F1*F2|\n|Division|=F1/F2|\n|Sum|=SUM(F1:F14)|\n|Sheets|=Sheet1!F2 (place this formula in a different sheet)|\n|Sum using Sheets|=Sheet1!F1+Sheet2!F1+Sheet3!F1|\n|Sum for many sheets|=Sum('Sheet1:Sheet9'!F1)|\n\nfrom:http://www.ezinstructions.com/excelfnc.html
http://support.microsoft.com/?kbid=229808
''CEILING( number, significance )''\nis for rounding up. use significance to decide what to round up to. Always rounds away from zero. The two arguments must have the SAME SIGN (i.e. both negative or both positive).\n*CEILING(1.342,1) = 2 (rounds up to nearest 1)\n*CEILING(1.342,0.1) = 1.4 (rounds up to nearest 0.1)\n*CEILING(1.342,4) = 4 (rounds up to nearest multiple of 4)\n*CEILING(-3.9, -3) = -6 (rounds "up" to nearest multiple of -3)\n*CEILING(-3.9, 2) =gives an error\n
returns the column number the cell reference is in.\n COLUMN( B7 ) = 2 (column B is the 2nd column)\n COLUMN( ) = the column of the cell the formula is in\n
''COUNTBLANK( cellRange )''\nreturns the number of blank cells in the range given.\nAlso see [[COUNT]], [[COUNTA]], [[COUNTIF]]\n*COUNTBLANK(F1:F7) = 7 (if column F is all blank)\n
[[COLUMN]]\n[[ISBLANK]]\n
[img[Charts|http://i34.photobucket.com/albums/d146/taorist/ScreenHunter_2.jpg]]\n''Charting Terms''\n|''A''|''Data Point''|//the value from a worksheet cell//|\n|''B''|''Data Marker''|//the chart symbol that represents a single data point//|\n|''C''|''Data Series''|//a group of data markers distinguished by the same color or pattern//|\n|''D''|''Legend''|//a sample of each series’ marker color and pattern, to identify the series on the chart//|\n|''E''|''Value Axis''|// typically the vertical axis (y-axis) on a chart, with values plotted against the axis//|\n|''F''|''Category Axis''|// typically the horizontal axis (x-axis) on a chart//|\n|''G''|''Category Labels''|//indicator for each group of data markers//|\n|''H''|''Gridlines''|//lines drawn in the plot area, to compare data markers with an axis value//|\nNext: [[Working with Charts]]
#[[Charting Terms]]\n#[[Working with Charts]]\n#[[Modifying Chart Options]]\n#[[Formatting Charts]]\n
First, download this ''[[file|http://www.4shared.com/file/2798974/2e2b3d79/comparing_excel_workbooks_samples.html]]''\n\nWhen you have two large tables of data in an Excel Workbook you may need to compare the tables to try and spot the differences. Below we will look at two very easy ways this can be done which will save you hours of manual work.\n\n[[True-False Method]]\n\n[[Conditional Formatting Method]]\n\n\n^^from:http://www.ozgrid.com/Excel/compare-excel-ranges.htm^^
Was there a time that you wanted certain cells to automatically highlight themselves when they reach a certain number or figure?\n\nFor example, you'd like to see who had the lowest in sales ''WITHOUT'' sorting or filtering? At one look, you'll see who were the ones who didn't meet the quota. Besides that, it greatly enhances your Excel file look.\n\n[[How do we do Conditional Formatting?]]\n
The second method is often the preferred way as it is easier to make any needed changes once the comparison has been done.\n\n#Using the above ranges to compare, select the range ''A1:C7'' stating from cell ''A1''. This ensures that ''A1'' is the //Active cell// in the selection.\n#With this range selected, go to ''Format>Conditional Formatting''\n#Select ''Formula'' Is and then type the formula ''=NOT(A1=A9)''\n#Click the ''Format'' button and choose the format to mark differences with. I have used an orange background.\n#Now simply click ''OK'' and all your differences will be formatted according to the format you have chosen. \nWhen or if you make any changes the cells format will automatically revert back to normal if the cell content is the same as the cell in the other table.
from:http://www.utexas.edu/its/training/handouts/excelchart/\n!Selecting data\n''Download sample ''[[here|http://www.4shared.com/file/2671825/2cfdb1d3/chart_example.html]]\n#Select the data you want to graph. \n#Select both the numeric data and adjacent row and column labels; Excel uses the labels for legend and axis information.\nFor example, in the figure below, select cells ''A4:D8'' to graph the monthly figures for each city.\n[img[Where you get the data for the chart|http://i34.photobucket.com/albums/d146/taorist/xlcharts1.gif]]\n\n3. If the data is not contiguous, use Excel’s multiple selection technique; select the first range of data, hold down the Control key then select the second range of data.\n\n''Chart Wizard''\n[img[Chart Icon|http://static.zooomr.com/images/b1ebc2cbb7918c562785819380ced3562d673bf0.jpg]]\nThe Chart Wizard guides you through each of the steps necessary to create a professional-looking chart. After you select the data you want to chart, click the Chart Wizard button on the toolbar. The Chart Wizard displays a series of step-by-step questions and dialog boxes that prompt you for information about the chart.\n\nNext: [[Modifying a Chart]]\n\n
[[Exploding a Wedge in a Pie Chart]]
''NOW()''\nreturns the current date and time as an Excel date.\n*MONTH( NOW() ) = 7 (if it's July right now)\n
[[Objective]]\n
[[Hide Errors]]\n[[Highlight Duplicates in Column]]\n[[Highlight Items in a List]]\n[[Highlight Upcoming Expiry Dates]]
[[Download|http://www.4shared.com/file/2877655/764334b2/set_3_test.html]]
''FLOOR( number, significance )''\nsame as ''[[CEILING]]'', but rounds toward zero.\n
You can use an Advanced Filter to extract a list of unique items in the database. For example, get a list of customers from an order list, or compile a list of products sold:\n''Note: The list must contain a heading, or the first item may be duplicated in the results.''\n# Select a cell in the database.\n#From the Data menu, choose Filter, Advanced Filter.\n#Choose 'Copy to another location'.\n#For the List range, select the column(s) from which you want to extract the unique values.\n#Leave the Criteria Range blank.\n#Select a starting cell for the Copy to location.\n#Add a check mark to the Unique records only box.\n#Click OK.
Download this ''[[file|http://www.4shared.com/file/2800275/6c8b1a45/filteradvcriteria_sample.html]]''\n\n[[Apply an Advanced Filter]]\n[[Filter unique records]]\n[[Setting up the Criteria Range]]\n\n[[Set 3 Exercise]]
#[[Working with Styles]]\n#[[Creating Custom Number Formats]]\n#[[Working with Hyperlinks]]\n#[[Cell Formats]]\n
#[[Activating Chart Objects]]\n#[[Changing Colors, Borders, and Patterns]]\n#[[Changing Font and Number Formatting]]\n#[[Formating Axes and Gridlines]]\n#[[Creating a Custom Chart Type]]\n\n
Download this ''[[file|http://www.4shared.com/file/2801244/881d1e75/function_sample.html]]''\n''[[The Basics]]''\n''[[Number]]\n''[[Cell]]''\n''[[Date]]''\n''[[Logical]]''\n''[[Text]]''\n^^from:http://danielbaird.com\n
You can use conditional formatting to check for errors, and change the font colour to match the cell colour. In this example, if column B contains a zero, the ''#DIV/0!'' error is displayed in column C.\n\n 1. Select cells ''C2:C5''\n 2. Choose ''Format>Conditional Formatting''\n 3. From the first dropdown, choose ''Formula Is''\n 4. For the formula, enter a formula that refers to the active cell in the selection:\n ''=ISERROR(C2)''\n or, to hide only #N/A errors: ''=ISNA(C2)''\n 5. Click the ''Format'' button.\n 6. Select a font colour to match the cell colour.\n 7. Click ''OK'', click ''OK''\n
Use conditional formatting to highlight duplicate entries in a column:\n\n 1. Select range ''A2:A11''\n 2. Choose ''Format/Conditional Formatting''\n 3. From the first dropdown, choose ''Formula Is''\n 4. For the formula, enter\n ''=COUNTIF($A$2:$A$11,A2)>1''\n 5. Click the ''Format'' button.\n 6. Select a font colour for highlighting.\n 7. Click ''OK'', click ''OK''\n
Use conditional formatting to highlight items that are in a list on the worksheet.:\n\n 1. Create a list of items you want to highlight. If the items are on a different sheet than the conditional formatting, name the list.\n 2. Select range ''A2:A7''\n 3. Choose ''Format|Conditional Formatting''\n 4. From the first dropdown, choose ''Formula Is''\n 5. For the formula, enter\n ''=COUNTIF($C$2:$C$4,A2)''\n or, if the list is named, use the name in the formula:\n ''=COUNTIF(~CodeList,A2)''\n 6. Click the ''Format button.''\n 7. Select a font colour for highlighting.\n 8. Click ''OK'', click ''OK''\n
You can highlight payments that are due in the next thirty days. In this example, Due dates are entered in cells ''A2:A4''.\n\n 1. Select cells ''A2:A4''\n 2. Choose ''Format/Conditional Formatting''\n 3. From the first dropdown, choose ''Formula Is''\n 4. For the formula, use the Today function count the days:\n ''=AND(~A2-TODAY()>=0,~A2-TODAY()<=30)''\n 5. Click the ''Format'' button.\n 6. Select formatting options (Bold, Blue font, in this example), click ''OK''\n 7. Click ''OK''\n
!Creating a Pivot Table from Excel\nFirst, download the sample ''[[here|http://www.4shared.com/file/2801678/ad8fa941/pivotdata_sample.html]]''\n[[Step 1: Creating a Pivot Table]]\n[[Step 2: Creating a Pivot Table]]\n[[Step 3: Creating a Pivot Table]]\n^^from:http://www.homeandlearn.co.uk/ME/mes9p5.html^^\n\n[[Set 2 Exercise]]
It is better explained in action.
Download this ''[[file|http://www.4shared.com/file/2822329/c94153f7/conditional_formatting_sample.html]]''\n[[Introduction]]\n[[Multiple Cells]]\n[[Examples]]\n\n[[Set 1 test]]\n\n^^from:http://www.contextures.com/xlCondFormat01.html#Apply^^\n
''IF( logicalTest, resultIfTrue, ~ResultIfFalse )''\nworks out whether logicalTest is true, and returns resultIfTrue if it is, and resultIfFalse if it isn't.\n*IF( A1 = "Staff", "Hello", "Not permitted") is another way of saying:\nif A1 = "Staff", then return "Hello"; otherwise return "Not permitted".\n*IF(A3=B6, "same", "different") = tells you if A3 and B6 are the same\n
''ISBLANK( cellReference )''\nreturns true if the cell reference is to a blank cell, otherwise false.\n
[[Absolute Cell Reference]]\n[[Conditional Formatting]]\n
Select the cells to be formatted\n# Choose ''Format>Conditional Formatting...''\n#Leave the first drop-down box set to ''Cell Value Is''\n#In the second drop-down box, choose one of the operators. In this example, choose '''greater than'''\n#In the text box, type a number or a cell reference. In this example, type the value you want to check -- ''75''.\n#Click the ''Format'' button\n#On the''Patterns tab'', select a colour for the conditional formatting -- blue, in this example.You can also choose a ''Font'' format or a cell ''Border''.\n#Click ''OK''.
\nLinking to a particular cell is easy.\n\n#click on the cell where you'd like to have the information appear.\n#encode "="\n#click to the cell where the information will come from.\n#Enter\n#done\n\nThis will work either ''within the worksheet'', ''between different worksheets'', and ''between workbooks''.
[[IF]]\n[[VLOOKUP]]
''MAX( aNumber, anotherNumber, … )''\nreturns the maximum of its arguments. The arguments could be cell ranges as well as numbers.\n\n*MAX(1, 2, 4) = 4\n*MAX(B:B) = the highest number anywhere in column B\n
''MIN( aNumber, anotherNumber, … )''\nsame as [[MAX]], but finds the minimum.\n
[[Objective]]\n[[Outline]]\n\n
Merging the Shared Workbooks Back Together\nSteps:\n#Open your base copy of the workbook you distributed.\n#Open the Tools menu and select Merge Workbooks.\n#Save the shared workbook if you are prompted.\n#In the box that appears, select one of the copies you made of the workbook.\n#Click OK.\n#Repeats steps 2 through 4 until all copies of the shared workbooks are merged.
[[Modifying Tiltles and Labels]]\n[[Modifying Axes, Gridlines, and Legends]]\n[[Changing the Data Range]]\n[[Working with Data Series]]\n[[Deleting a Chart]]
!!Chart Wizard Step 1\n#Choose the type of chart you want. \n#Select the type of chart in the left column, \n#Choose the sub-type in the right column. \n\nFor example, to create a ''Column chart'', select ''//Column//'' and then choose the //Column chart sub-type.//\n[img[[Figure 2|http://i34.photobucket.com/albums/d146/taorist/xlcharts2.gif]]\n\n4. Click the ''Next'' button to continue to the next step.\n----\n!!Chart Wizard Step 2\n[img[Figure 3|http://static.zooomr.com/images/539380f24bd353f53afb20464175568ca1050dc2.jpg]]\n#Specify the location and orientation of your data range.\n#If you selected data before clicking the ''Chart Wizard'', those cells appear in the ''Data Range'' box. \n#The Series section controls which labels appear on the X-axis. \nIn the above example, if you choose Series in Rows, the month labels appear on the X-axis. Series in Columns creates a chart with the city labels appearing on the X-axis.\n----\n!!Chart Wizard Step 3\n[img[Figure 4|http://i34.photobucket.com/albums/d146/taorist/xlcharts4.gif]]\nStep 3 of the Chart Wizard presents numerous options ranging from Chart Titles to Legends and Gridlines.\n#To change one of these options click the tab at the top of the Step 3 dialog box. \nFor example, to control where the Legend appears, click the Legend Tab and select the appropriate Legend placement.\n----\n!!Chart Wizard Step 4\n[img[Figure 5|http://i34.photobucket.com/albums/d146/taorist/xlcharts5.gif]]\nIn Step 4, the Chart Wizard prompts you for a chart location. \n#You can create the chart on the same worksheet as the data or on another worksheet.\n#Click ''Finish'' after you select the location for your chart.
''Apply Conditional Formatting to a Row''\nYou can apply conditional formatting that checks the value in one cell, and applies formatting to other cells, based on that value. For example, you could colour the entire row in a table, if the values in column B are over a set value.\n\n1. Select the cells to be formatted (''A2:D4'' in this example)\n2. Choose ''Format>Conditional Formatting...''\n3. From the first drop-down list, choose ''Formula Is''\n4. In the text box, enter a formula that refers to the active cell in the selection.\n\n In this example, the formula is: ''=$B2>75''\n\n Use an absolute reference to column B (''$B''), to ensure that the conditional formatting in all columns refers to the value in column B. Otherwise, the formula will be adjusted in each column, and won't work properly.\n5. Click the ''Format'' button.\n6. Select the formatting options, click ''OK''\n7. Click ''OK''
[[Define...]]\n[[Paste...]]\n[[Create...]]\n[[Apply...]]\n[[Label...]]
[[CEILING]]\n[[FLOOR]]\n[[COUNTBLANK]]\n[[MAX]]\n[[MIN]]\n[[ROUND]]\n[[SUM]]\n[[VALUE]]
By the end of the training session, the trainees will be able to [[create|Creating a Chart]], [[edit, format, and modify |Modifying a Chart]][[Charts]], apply [[Conditional Formatting]], use financial and logical [[Functions]], and work with multiple [[Worksheet]]s within the alloted time.
[[Important Menu Commands]]\n[[Pivot Table]]\n[[Pivot Chart]]\n[[Worksheet]]\n[[Functions]]
[[Clip Art...]]\n[[From File...]]\n[[Autoshapes]]\n[[Organizational Chart]]\n[[Word Art]]\n[[From Scanner]]
[[What is a Pivot Chart?]]\n[[What is the Pivot Chart for?]]\n[[How do I do one?]]\n\n
[img[Pivot Table|http://i34.photobucket.com/albums/d146/taorist/Excel-01_thumbnail.gif]]\n''[[What is a Pivot Table?]]''\n''[[What is it for?]]''\n''[[How do I create one?]]''\n
<<slideShow>>\n!Outline\n<<tiddler Outline>>\n----\n!Objective\n<<tiddler Objective>> \n!Creating a Chart\n<<tiddler [[Creating a Chart]]>>
from:http://departments.oxy.edu/its/training/excel/excel_charts.html\n!Printing Your Chart\n#Select what you would like to print.\n#If you are printing just your chart, click on it to select it. If you want to print out the spreadsheet also, highlight all of the cells that you have data in and the cells behind the chart.\n#Choose: ''File->Print Area->Set Print Area''. You will notice that a dashed line appears around your selection.\n#Now choose: ''File->Print'' to print your document.\n#If you would like to change the area to print, choose: ''File->Print Area->Clear Print Area'' and start over with step No. 2.\n
''ROUND( aNumber, digitsAfterDecimal )''\nrounds a number off to the digits specified. If you specify a negative digitsAfterDecimal, it will round to the left of the decimal point.\n*ROUND(1.162, 2) = 1.16\n*ROUND(1.162, 1) = 1.2\n*ROUND(1.162, 0) = 1\n*ROUND(276.3, -2) = 300 (rounds to 2 places before decimal)\n
[[Height]]\n[[Autofit]]\n[[Hide]]\n[[Unhide]]
''SUM( aNumber, anotherNumber, … )''\nsums the numbers or cells you give it.\n*SUM(4, 7) = 11\n*SUM(A1, A2, A3) = the sum of those three cells\n*SUM(C:D) = the sum of everything in columns C and D\n
Download the ''[[TEST|http://www.4shared.com/file/3000365/3e76c8ea/set_1_exercise.html]]''
Downolad the ''[[FILE|http://www.4shared.com/file/2877534/55581dfb/set_2_exercise.html]]''
Download the ''[[FILE|http://www.4shared.com/file/2877655/764334b2/set_3_test.html]]''
''AND vs. OR''\n*If a record meets all criteria on one row in the criteria area, it will pass through the filter. In example 1, at right -- customer must be ~MegaMart AND product must be Cookies AND total must be greater than 500.\n\n[img[http://i34.photobucket.com/albums/d146/taorist/andor1.gif]]\n \n*Criteria on different rows are joined with an OR operator. In the second example at right --customer must be ~MegaMart OR product must be Cookies OR total must be greater than 500.\n\n[img[http://i34.photobucket.com/albums/d146/taorist/andor2.gif]]\n \n*By using multiple rows, you can combine the AND and OR operators. In the third example at right -- customer must be ~MegaMart AND product must be Cookies OR product must be Cookies AND total must be greater than 500.\n\n[img[http://i34.photobucket.com/albums/d146/taorist/andor3.gif]]
In Excel 2000, you can:\n*distribute copies of a spreadsheet, \n*have reviewers provide input, \n*and then "merge" the review copies back into one workbook. \nTo do this, you first set up the basic workbook to be "shared," then merge the shared copies back into one.\n \n''Preparing a Workbook to Be Shared''\n \nSteps:\n#Open the workbook you want to distribute.\n#Open the //Tools menu// and click //Share Workbook//, and then click the //Editing tab//.\n#Select the ''"Allow changes by more than one user at the same time"'' box.\n#Click the //Advanced// tab.\n#Under ''"Track changes," click "Keep change history for."''\n#In the //Days// box, type a few days longer than the number of days reviewers will spend making changes and comments in the shared workbook.\n#Click ''OK''.\n#Save the workbook.\n#Make copies of the workbook to distribute by using the Save As command in the File menu. Give each copy a different name, such as "Budget - Cecil copy" and "Budget - Jo copy."\n\n^^from:http://www.ehow.com/how_13023_merge-workbooks-excel.html^^
[[Rename]]\n[[Hide]]\n[[Unhide]]\n[[Background]]
An Intermediate Guide to MS Excel
Intermediate MS EXCEL Training
/***\n|!Name:|SlideShowPlugin |\n|!Version:|1.3.0 - 26/02/2006|\n|!Source:|http://www.math.ist.utl.pt/~psoares/addons.html |\n|!Authors:|[[Paulo Soares|mailto:psoares@math.ist.utl.pt]] and [[Clint Checketts|http://www.checkettsweb.com]] |\n|!Type:|Macro |\n|!Requires:|TiddlyWiki >= 2.0.0 |\n!Description\nThis plugin turns a TiddlyWiki tiddler into a simple slide show type display. You can have looping, timed or themed slide shows. It should work in a way that does not interfere with TiddlyWiki. When you close the slide show you get back to your good old TW. \n\nThis plugin has been tested in Firefox, Internet Explorer, Safari, and Opera. Let us know if something seems broken.\n!Usage\nTo use this plugin you //must// be using TiddlyWiki 2.0. Install this tiddler and drop {{{<<slideShow>>}}} at the beginning of the tiddler. Use ! to start each slide with or without a title. Mark the end of your slides with a rule (- - - -). Everything that appears before the first header or after the closing rule is not shown in the slide show. \nThere are also a few navigation buttons and a table of contents that shows up if you click the slide number.\nSee other options in this [[SlideShowExample]].\n!Revision history\nv1.3.0 26/02/2006 - restore open tiddlers on exit, fixed problem with markup in headers (should work with NestedSlidersPlugin), added slide comments (blocks of text in the tiddler that don't show up in the presentation)\nv1.2.1 28/01/2006 - pause timed slideshow with spacebar, clock with 3 different modes, fixed bugs with style and abbreviation options, general cleanup\nv1.2.0 07/01/2006 - added a resume feature and themes support\nv1.1.5 Beta 12/14/2005 - added mouse support and cleaned up navbar generation\nv1.1.0 Beta 12/12/2005 - added support for IE, added key listeners\nv1.0.0 12/11/2005 - initial release\n!Todo\n*Incremental advancement within a slide\n*Cross fade effects\n!Code\n***/\n//{{{\nversion.extensions.SlideShowPlugin = {\n major: 1, minor: 3, revision: 0,\n date: new Date(2006, 2, 26), \n type: 'macro',\n source: "http://www.math.ist.utl.pt/~psoares/addons.html#SlideShowPlugin"\n};\n\nconfig.macros.slideShow = {label: "slide show", maxTOCLength: 30};\nconfig.macros.slideShow.messages = {gotoLabel: "Go to slide:"};\nconfig.views.wikified.slideShow = {text: "slide show", tooltip: "Start slide show"};\nconfig.views.wikified.slideShow.quit = {text: "end", tooltip: "Quit the slide show"};\nconfig.views.wikified.slideShow.firstSlide = {text: "<<", tooltip: "first slide"};\nconfig.views.wikified.slideShow.previousSlide = {text: "<", tooltip: "previous slide"};\nconfig.views.wikified.slideShow.nextSlide = {text: ">", tooltip: "next slide"};\nconfig.views.wikified.slideShow.lastSlide = {text: ">>", tooltip: "last slide"};\n\nfunction changeStyleSheet(tiddlerName) {\n if (tiddlerName == null) tiddlerName = "StyleSheet";\n setStylesheet(store.getTiddlerText("StyleSheetColors"),"StyleSheetColors");\n setStylesheet(store.getTiddlerText("StyleSheetLayout"),"StyleSheetLayout");\n var theCSS = store.getRecursiveTiddlerText(tiddlerName,"");\n setStylesheet(theCSS,"StyleSheet");\n}\n\nconfig.formatters.push({\n name: "slideShowComment",\n match: "%%",\n lookahead: "%%((?:.|\s\sn)*?)%%",\n className: "slideShowComment",\n handler: function(w) {\n var lookaheadRegExp = new RegExp(this.lookahead,"mg");\n lookaheadRegExp.lastIndex = w.matchStart;\n var lookaheadMatch = lookaheadRegExp.exec(w.source)\n var p = createTiddlyElement(w.output,"span",null,this.className);\n wikify( lookaheadMatch[1], p, null, w.tiddler);\n w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;\n }\n});\n\n//Excellent (and versatile) reparser created by Paul Petterson for parsing the paramString in a macro\nfunction reparse( params ) {\n var re = /([^:\ss]+)(?:\s:((?:\sd+)|(?:["'](?:[^"']+)["']))|\ss|$)/g;\n var ret = new Array() ;\n var m ;\n while( (m = re.exec( params )) != null ) ret[ m[1] ] = m[2]?m[2]:true ;\n return ret ;\n}\n\n// 'keys' code adapted from S5 which in turn was adapted from MozPoint (http://mozpoint.mozdev.org/)\nfunction keys(key) {\n if (!key) {\n key = event;\n key.which = key.keyCode;\n }\n if (document.getElementById('contentWrapper').className == "slideShowMode"){\n switch (key.which) {\n case 32: // spacebar\n if(time>0){\n if(autoAdvance){\n clearInterval(autoAdvance);\n autoAdvance = null;\n } else {\n autoAdvance=setInterval("GoToSlide(1)", time);\n }\n }\n break;\n case 34: // page down\n case 39: // rightkey\n case 40: // downkey\n GoToSlide(1);\n break;\n case 33: // page up\n case 37: // leftkey\n case 38: // upkey\n GoToSlide(-1);\n break;\n case 36: // home\n GoToSlide("f");\n break;\n case 35: // end\n GoToSlide("l");\n break;\n case 27: // escape\n endSlideShow();\n break;\n }\n\n }\n return false;\n}\n\nfunction clicker(e) {\n if (!e) var e = window.event;\n var target = resolveTarget(e);\n //Whenever something is clicked that won't advance the slide make sure that the table of contents gets hidden\n if (target.getAttribute('href') != null || isParentOrSelf(target, 'toc') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object') || isParentOrSelf(target, 'pageFooter') || isParentOrSelf(target, 'navigator')){\n //Don't hide the TOC if the indexNumbers (which trigger the index) is clicked\n if(isParentOrSelf(target,'indexNumbers') || isParentOrSelf(target,'jumpInput')){\n return true;\n }\n showHideTOC('none');\n return true;\n }\n \n //Advance a slide if the TOC is visible otherwise make sure that the TOC gets hidden\n if ((!e.which && e.button == 1) || e.which == 1) {\n if (document.getElementById('toc').style.display != 'block'){\n GoToSlide(1);\n } else {\n showHideTOC('none');\n }\n }\n \n if ((!e.which && e.button == 2) || e.which == 3) {\n if (document.getElementById('toc').style.display != 'block'){\n GoToSlide(-1);\n } else {\n showHideTOC('none');\n }\n return false;\n }\n}\n\nfunction isParentOrSelf(element, id) {\n if (element == null || element.nodeName=='BODY') return false;\n else if (element.id == id) return true;\n else return isParentOrSelf(element.parentNode, id);\n}\n\nfunction GoToSlide(step) {\n var new_pos;\n var slideHolder = document.getElementById('slideContainer');\n //The parse float ensures that the attribute is returned as a number and not a string.\n var cur_pos = parseFloat(slideHolder.getAttribute('currentslide'));\n var numberSlides = slideHolder.getElementsByTagName("div").length;\n switch (step) {\n case "f":\n new_pos=0;\n break;\n case "l":\n new_pos=numberSlides-1;\n break;\n default:\n new_pos=cur_pos+step;\n }\n \n if(slideShowCircularMode && new_pos == numberSlides) new_pos=0;\n if(slideShowCircularMode && new_pos<0) new_pos=(numberSlides - 1);\n if(step!=0 && new_pos>=0 && new_pos<numberSlides) {\n slideHolder.childNodes[cur_pos].style.display='none';\n slideHolder.childNodes[new_pos].style.display='block';\n slideHolder.setAttribute('currentslide',new_pos);\n new_pos++;\n var indexNumbers = document.getElementById('indexNumbers');\n indexNumbers.firstChild.data = new_pos+'/'+numberSlides;\n if((new_pos==numberSlides) && !slideShowCircularMode && autoAdvance) clearInterval(autoAdvance);\n return true;\n }\n return false;\n}\n\nfunction tocShowSlide(e) {\n if (!e) var e = window.event;\n var target = resolveTarget(e);\n var slide = target.getAttribute('slideNumber');\n var cur_pos = document.getElementById('slideContainer').getAttribute('currentslide');\n var step = slide-cur_pos;\n if(step!=0) GoToSlide(step);\n showHideTOC('none');\n return;\n}\n\n//Toggle the display of the table of contents\nfunction showHideTOC(display){\n var toc = document.getElementById('toc');\n //Reset the input box\n document.getElementById('jumpInput').value = "";\n\n if (display == null || display.length == null){\n if (toc.style.display == 'none' || toc.style.display == ''){\n toc.style.display = 'block';\n document.getElementById('jumpInput').focus();\n } else {\n toc.style.display = 'none';\n }\n } else {\n toc.style.display = display;\n if (display == 'block')\n document.getElementById('jumpInput').focus();\n }\n}\n\nfunction makeSignature(title,params){\n var signature = title+store.getTiddler(title).modified;\n if(params['style']) signature += params['style'];\n if(params['repeat']) signature += "repeat";\n if(params['slidePause'] > 0) signature += params['slidePause'];\n if(params['tocLabel']) signature += params['tocLabel'];\n if(params['autostart']) signature += "autostart";\n if(params['clock']) signature += params['clock'];\n return signature;\n}\n\nfunction padZero(par){\n if(par<10) par="0"+par;\n return par;\n}\n\nfunction setClock(){\n var actualTime = new Date();\n var newTime = actualTime - clockStartTime;\n newTime = clockMultiplier*newTime+clockInterval-3600000;\n actualTime.setTime(newTime);\n newTime = padZero(actualTime.getHours()) + ":" + padZero(actualTime.getMinutes())+ ":" + padZero(actualTime.getSeconds());\n var clock = document.getElementById('slideClock');\n clock.firstChild.nodeValue = newTime;\n}\n\nfunction resetClock(){\n var time = new Date(70,1,1,0,0,0);\n if(clockStartTime-time>0) clockStartTime = new Date();\n}\n\nvar title;\nvar place;\nvar autoAdvance=null;\nvar slideClock=null;\nvar time = 0;\nvar slideShowCircularMode;\nvar slideShowStyleSheet;\nvar slideShowParams;\nvar clockMultiplier;\nvar clockInterval;\nvar clockStartTime;\nvar openTiddlers;\n\nconfig.macros.slideShow.handler = function(aPlace,macroName,params,wikifier,paramString,tiddler){\n if(tiddler instanceof Tiddler){\n var lingo = config.views.wikified.slideShow;\n var autostart = false;\n if (!e) var e = window.event;\n \n place = aPlace;\n title = tiddler.title;\n params = reparse(paramString);\n var onclick = function(){config.macros.slideShow.onClickSlideShow(params);};\n createTiddlyButton(aPlace,lingo.text,lingo.tooltip,onclick);\n \n var slideShowHolder = document.getElementById('slideShowWrapper');\n //If no show exist previously, create it\n if(params['autostart']){\n if(slideShowHolder != null){\n var signature = slideShowHolder.getAttribute('showSignature');\n if(signature.indexOf("autostart")==-1) autostart = true;\n } else {autostart = true;}\n if(autostart){\n slideShowParams = params;\n setTimeout("config.macros.slideShow.onClickSlideShow(slideShowParams);",10);\n }\n }\n }\n}\n\nvar disableFunction = function(e){return false;}\nvar enableFunction = function(e){}\n\nconfig.macros.slideShow.onClickSlideShow = function(newParams) {\n\nopenTiddlers = new Array;\nvar viewer=document.getElementById('tiddlerDisplay');\nfor(var i=0; i<viewer.childNodes.length; i++){\n var name = viewer.childNodes[i].getAttribute('tiddler');\n openTiddlers.push(name);\n}\n\n document.oncontextmenu = disableFunction;\n clockMultiplier = 1;\n clockInterval = 0;\n clockStartTime = new Date(70,1,1,0,0,0);\n slideShowCircularMode = false;\n time = 0;\n slideShowStyleSheet = null;\n if(newParams['style']){\n slideShowStyleSheet = eval(newParams['style']);\n } \n if(newParams['repeat']){\n slideShowCircularMode = true;\n }\n if(newParams['slidePause'] > 0){\n time = newParams['slidePause'];\n }\n if(newParams['clock']){\n clockStartTime = new Date();\n var clockType= eval(newParams['clock']);\n if(clockType != '+') {\n clockMultiplier = -1;\n clockInterval = -clockType*60000;\n }\n }\n\n var contentWrapper = document.getElementById('contentWrapper');\n if (contentWrapper.className != "slideShowMode"){\n clearMessage();\n //Attach the key and mouse listeners\n document.onkeyup = keys;\n document.onmouseup = clicker;\n \n var slideShowHolder = document.getElementById('slideShowWrapper');\n //If no show exist previously, create it\n if(slideShowHolder == null){\n createSlides(newParams);\n //If there was once waiting in the background and it matches the one we just started, resume it\n } else if (slideShowHolder.getAttribute('showSignature') == makeSignature(title,newParams)){\n \n //Remove dblClick on edit function\n var theTiddler = document.getElementById("tiddler"+title);\n theTiddler.ondblclick = function() {};\n\n // Grab the 'viewer' element and give it a signature so the show can be resumed if stopped\n var tiddlerElements = theTiddler.childNodes;\n var viewer;\n for (var i = 0; i < tiddlerElements.length; i++){\n if (tiddlerElements[i].className == "viewer") viewer = tiddlerElements[i];\n }\n theTiddler.insertBefore(slideShowHolder,viewer);\n theTiddler.removeChild(viewer);\n slideShowHolder.style.display = 'block';\n document.getElementById("pageFooter").className = "pageFooterOff";\n \n //If the show we started it totally new than the resumable one, create the new one and kill the resumable one\n } else {\n slideShowHolder.parentNode.removeChild(slideShowHolder);\n createSlides(newParams);\n }\n slideClock=setInterval("setClock()", 1000); \n if(time>0) autoAdvance=setInterval("GoToSlide(1)", time); \n story.closeAllTiddlers(title);\n toggleSlideStyles();\n } else {\n endSlideShow();\n }\n return ;\n \n}\n\nfunction endSlideShow(){\n //Set aside show so it can be resumed later\n var showHolder = document.getElementById('slideShowWrapper');\n showHolder.style.display = 'none';\n document.getElementById('contentWrapper').parentNode.appendChild(showHolder);\n document.oncontextmenu = enableFunction;\n if(autoAdvance) clearInterval(autoAdvance);\n if(slideClock) clearInterval(slideClock);\n story.refreshTiddler(title,null,true);\n story.closeAllTiddlers();\n story.displayTiddlers(null,openTiddlers,DEFAULT_VIEW_TEMPLATE);\n document.onmouseup = function(){};\n toggleSlideStyles();\n}\n\nfunction isInteger(s){\n var i;\n for (i = 0; i < s.length; i++){\n // Check that current character is number.\n var c = s.charAt(i);\n if (((c < "0") || (c > "9"))) return false;\n }\n // All characters are numbers.\n return true;\n}\n\nfunction jumpInputToSlide(e){\n if (!e) {\n e = window.event;\n e.which = e.keyCode;\n }\n if(e.which==13){\n var jumpInput= document.getElementById("jumpInput").value;\n if(isInteger(jumpInput)){\n var step=jumpInput-document.getElementById('slideContainer').getAttribute('currentslide')-1;\n if (GoToSlide(step)){\n showHideTOC('none'); \n }\n }\n }\n return;\n}\n\n//Used to shorten the TOC fields\nfunction abbreviateLabel(label){\n// if (label == null) label = "A Slide" //This is just a place holder fix\n var maxTOCLength = config.macros.slideShow.maxTOCLength;\n if(label.length>maxTOCLength) {\n var temp = new Array();\n temp = label.split(' ');\n label = temp[0];\n for(var j=1; j<temp.length; j++){\n if((label.length+temp[j].length)<=maxTOCLength){\n label += " " + temp[j];\n } else {\n label += " ...";\n break;\n }\n }\n }\n return label;\n}\n\ncreateSlides = function(newParams){\n var lingo = config.views.wikified.slideShow;\n\n //Remove dblClick on edit function\n var theTiddler = document.getElementById("tiddler"+title);\n theTiddler.ondblclick = function() {};\n\n // Grab the 'viewer' element and give it a signature so the show can be resumed if stopped\n var tiddlerElements = theTiddler.childNodes;\n var viewer;\n for (var i = 0; i < tiddlerElements.length; i++){\n if (tiddlerElements[i].className == "viewer") viewer = tiddlerElements[i];\n }\n viewer.id = 'slideShowWrapper';\n viewer.setAttribute("showSignature",makeSignature(title,newParams));\n\n //Hide the text that comes before the first H1 element (I think I may put this into a cover page type thing)\n while(viewer.childNodes.length > 0 && viewer.firstChild.nodeName.toUpperCase() != "H1") {\n viewer.removeChild(viewer.firstChild);\n }\n \n //Cycle through the content an each time you hit an H1 begin a new slide div\n var slideNumber = 0;\n var slideHolder = document.createElement('DIV');\n slideHolder.id = "slideContainer";\n \n while(viewer.childNodes.length > 0){\n //Create a new slide a append it to the slide holder\n if (viewer.firstChild.nodeName == "H1"){\n slideNumber++;\n var slide = document.createElement('DIV');\n slide.id = "slideNumber"+slideNumber;\n slide.className = "slide";\n if (slideNumber > 1) {\n slideHolder.setAttribute('currentslide',0);\n slide.style.display='none';\n } else {\n slide.style.display='block';\n }\n slideHolder.appendChild(slide); \n }\n\n //Grab the first thing in the viewer and check to see if its an H1, if so put it in a slide, it will shift everything else forward\n slide.appendChild(viewer.firstChild);\n\nif(viewer.childNodes.length > 0 && viewer.firstChild.className=="slideShowComment") {\n viewer.removeChild(viewer.firstChild);\n }\n\n //If you hit a horizontal rule (HR) remove the remaining elements until you hit an H1\n if(viewer.childNodes.length > 0 && viewer.firstChild.nodeName=="HR") {\n while(viewer.childNodes.length > 0 && viewer.firstChild.nodeName != "H1") {\n viewer.removeChild(viewer.firstChild);\n }\n }\n }\n \n //Stick the slides back into the viewer\n viewer.appendChild(slideHolder);\n\n \n //Create the navigation bar\n var pagefooter = createTiddlyElement(viewer,"DIV","pageFooter","pageFooterOff");\n var navigator = createTiddlyElement(pagefooter,"SPAN","navigator");\n\n //Make it so that when the footer is hovered over the class will change to make it visible\n pagefooter.onmouseover = function () {pagefooter.className = "pageFooterOn"};\n pagefooter.onmouseout = function () {pagefooter.className = "pageFooterOff"};\n\n //Create the control button for the navigation \n var onClickQuit = function(){endSlideShow();};\n createTiddlyButton(navigator,lingo.quit.text,lingo.quit.tooltip,onClickQuit);\n createTiddlyButton(navigator,lingo.firstSlide.text,lingo.firstSlide.tooltip,first_slide);\n createTiddlyButton(navigator,lingo.previousSlide.text,lingo.previousSlide.tooltip,previous_slide);\n createTiddlyButton(navigator,lingo.nextSlide.text,lingo.nextSlide.tooltip,next_slide);\n createTiddlyButton(navigator,lingo.lastSlide.text,lingo.lastSlide.tooltip,last_slide); \n\n var clock = createTiddlyElement(navigator,"SPAN","slideClock","slideClock","");\n clock.onclick = resetClock;\n\n var indexNumbers = createTiddlyElement(pagefooter,"SPAN","indexNumbers","indexNumbers","1/"+slideNumber)\n indexNumbers.onclick = showHideTOC;\n\n var toc = createTiddlyElement(pagefooter,"UL","toc");\n\n \n for (var i=0;i<slideHolder.childNodes.length;i++) {\n //Loop through each slide and check the header's content\n var tocLabel = null;\n\n if(slideHolder.childNodes[i].firstChild.hasChildNodes()){\n var htstring = slideHolder.childNodes[i].firstChild.innerHTML;\n var stripped = htstring.replace(/(<([^>]+)>)/ig,""); \n tocLabel = abbreviateLabel(stripped);\n } else if (newParams['tocLabel'] != null){\n j=i+1;\n tocLabel = eval(newParams['tocLabel'])+" "+j;\n }\n \n //If the slide doesn't have a title (explicit or generated) don't include it in the table of contents\n if (tocLabel != null){\n var tocItem = createTiddlyElement(toc,"LI",null,"tocLevel1");\n var tocLink = createTiddlyElement(tocItem,"A",null,"tocItem",tocLabel);\n tocLink.setAttribute("slideNumber",i);\n tocLink.onclick=tocShowSlide; \n }\n \n\n for (var j=1;j<slideHolder.childNodes[i].childNodes.length;j++) {\n var node = slideHolder.childNodes[i].childNodes[j];\n if(node.nodeName=="H2" || node.nodeName=="H3" || node.nodeName=="H4") {\n var htstring = node.innerHTML;\n var stripped = htstring.replace(/(<([^>]+)>)/ig,"");\n tocLabel = abbreviateLabel(stripped);\n switch (node.nodeName) {\n case "H2":\n var tocItem = createTiddlyElement(toc,"LI",null,"tocLevel2");\n break;\n case "H3":\n var tocItem = createTiddlyElement(toc,"LI",null,"tocLevel3");\n break;\n case "H4":\n var tocItem = createTiddlyElement(toc,"LI",null,"tocLevel4");\n }\n var tocLink = createTiddlyElement(tocItem,"A",null,"tocItem",tocLabel);\n tocLink.setAttribute("slideNumber",i);\n tocLink.onclick=tocShowSlide;\n }\n }\n }\n \n\n //Input box to jump to s specific slide\n var tocItem = createTiddlyElement(toc,"LI",null,"tocJumpItem",config.macros.slideShow.messages.gotoLabel);\n var tocJumpInput = createTiddlyElement(tocItem,"INPUT","jumpInput");\n tocJumpInput.type="text";\n tocJumpInput.onkeyup=jumpInputToSlide;\n}\n\nvar next_slide= function(e){GoToSlide(1);}\nvar first_slide= function(e){GoToSlide("f");}\nvar previous_slide= function(e){GoToSlide(-1);}\nvar last_slide= function(e){GoToSlide("l");}\n\nfunction toggleSlideStyles(){\n var contentWrapper = document.getElementById('contentWrapper');\n if (contentWrapper.className == "slideShowMode"){\n contentWrapper.className = "";\n if(slideShowStyleSheet) changeStyleSheet();\n } else{\n contentWrapper.className = "slideShowMode";\n if(slideShowStyleSheet) changeStyleSheet(slideShowStyleSheet);\n }\n}\n\nsetStylesheet("/***\sn!Slide Mode Styles\sn***/\sn/*{{{*/\sn#contentWrapper.slideShowMode #slideContainer{\sn display: block;\sn}\sn\sn#jump{\sn text-align: right;\sn}\sn\sn.pageFooterOff #navigator{\sn visibility: hidden;\sn}\sn\sn.pageFooterOn #navigator{\sn visibility: visible;\sn}\sn\sn#contentWrapper.slideShowMode #slideClock{\sn cursor: pointer; margin: 0 5px 0 5px; border: 1px solid #db4\sn}\sn\sn#contentWrapper.slideShowMode,\sn #contentWrapper.slideShowMode #displayArea{\sn width: 100%;\sn font-size: 1.5em;\sn margin: 0;\sn padding: 0;\sn}\sn\sn#slideContainer{\sn display: none;\sn}\sn\sn#contentWrapper.slideShowMode #sidebar,\sn#contentWrapper.slideShowMode #mainMenu,\sn#contentWrapper.slideShowMode .header,\sn#contentWrapper.slideShowMode #displayArea .toolbar,\sn#contentWrapper.slideShowMode #displayArea .footer,\sn#contentWrapper.slideShowMode #displayArea .subtitle,\sn#contentWrapper.slideShowMode #displayArea .tagged,\sn#contentWrapper.slideShowMode #displayArea .tagging\sn{\sn display:none;\sn}\sn\sn.indexNumbers{\sn cursor: pointer;\sn}\sn\sn#navigator{\sn visibility: hidden;\sn bottom: 0;\sn}\sn\sn#toc{\sn display: none;\sn position: absolute;\sn font-size: .75em;\sn bottom: 2em;\sn right: 0;\sn background: #fff;\sn border: 1px solid #000;\sn text-align: left;\sn}\sn\snul#toc, #toc li{\sn margin: 0;\sn padding: 0;\sn list-style: none;\sn line-height: 1em;\sn}\sn\sn.tocJumpItem{\sn margin-right: 2em;\sn}\sn\sn.tocJumpItem input{\snmargin-right: 1em;\sn border: 0;\sn}\sn\sn#toc a,\sn#toc a.button{\sn display: block;\sn padding: .1em;\sn}\sn\sn#toc .tocLevel1{\snfont-size: .8em;\sn}\sn\sn#toc .tocLevel2{\sn margin-left: 1em;\sn font-size: .75em;\sn}\sn\sn#toc .tocLevel3{\sn margin-left: 2em;\snfont-size: .75em;\sn}\sn\sn#toc .tocLevel4{\sn margin-left: 3em;\snfont-size: .65em;\sn}\sn\sn#toc a{\sn cursor: pointer;\sn}\sn\snh1{\sn min-height: 1em;\sn}\sn\sn.slide h1{\sn min-height: 0;\sn}\sn\sn/* The '&gt;' selector is ignored by IE6 and earlier so the proper rules are given */\sn#pageFooter{\sn position: fixed;\sn bottom: 2px;\sn right: 2px;\sn width: 100%;\sn text-align: right;\sn}\sn\sn/* This is a hack to trick IE6 and earlier to put the navbar on the bottom of the page */\sn* html #pageFooter {\sn position: absolute;\sn width: 100%;\sn text-align: right;\sn right: auto; bottom: auto;\sn left: expression( ( -20 - pageFooter.offsetWidth + ( document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth ) + ( ignoreMe2 = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ) ) + 'px' );\sn top: expression( ( -10 - pageFooter.offsetHeight + ( document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ) ) + 'px' );\sn}\sn\sn\sn\sn/*}}}*/","slideShowStyles");\n//}}}
In ''five'' easy steps:\n#Highlight the whole spreadsheet.\n#Click on ''Data>Sort''\n#Click on the pulldown button and choose the header of the column you want to prioritize.\n#Continue until the third option.\n#Click ''OK''.\n\n[[Sorting more than 4 items]]\n
Download this ''[[File|http://www.4shared.com/file/2799580/1f787bae/sort_by_four_or_more_columns.html]]''\n\nOccasionally, you may need to sort by ''more'' than three columns. For example, in a mailing list, you may want to sort by Country, Region, City, and Name. To do this, you can sort the list multiple times, starting with the least important sort.\n\nIn the mailing list, there are four columns to sort. Name and City are the least important fields in the sorting process, so they can be sorted first.\n\n 1. Select all the cells in the list.\n 2. Choose Data>Sort\n 3. From the Sort by dropdown, select City.\n 4. From the Then by dropdown, select Name.\n 5. Click OK\n\n Excel will retain what it can of this sort while you sort by the remaining fields.\n\n 1. With all the cells still selected, choose Data>Sort\n 2. From the Sort by dropdown, select Country.\n 3. From the Then by dropdown, select Region.\n 4. Click OK \n\n\n\n\n\n^^from: http://www.contextures.com/xlSort01.html#Top^^
The Pivot Table is constructed using a ''__Wizard__''. To create yours, do the following:\n#Click inside cell A2 on the spreadsheet you downloaded above\n#From Excel's menu bar, click on Data\n#From the menu that drops down, click on ~PivotTable and ~PivotChart Report\n#The Pivot Table wizard starts up\n\n[img[Figure 1|http://i34.photobucket.com/albums/d146/taorist/PIVOT3.jpg]]\n\nAs the Wizard says, this is ''step one of three''. There's nothing much for us to do in step one because the options we want are selected: "Microsoft Excel list or database" and "Pivot Table". With these options chosen, click the ''[[Next|Step 2: Creating a Pivot Table]]'' button at the bottom.
The Wizard moves on to Step Two. It looks like this:\n\n[img[Figure 2|http://i34.photobucket.com/albums/d146/taorist/PIVOT4.jpg]]\n\nThe Range of cells that Excel will include in our Pivot Table is A1 to D37. (You can change this if you want.) Because we clicked in cell A2 to begin with, Excel has taken that as the first Row of Data. Excel uses the labels from Row 1 as Headings. Excel will use these for our drop down boxes and data.\n\nClick the ''[[Next|Step 3: Creating a Pivot Table]]'' button on Step Two. Step Three of the Wizard appears. It's a little more complicated, this time.
\n[img[Figure 4|http://i34.photobucket.com/albums/d146/taorist/PIVOT5.jpg]]\n\nWe'll accept the default position for the location of the Pivot Table - New worksheet. The button we're after is ''Layout''. So click the ''Layout'' button to see a quite complicated dialogue box. This one:\n\n[img[Figure 5|http://i34.photobucket.com/albums/d146/taorist/PIVOT6.jpg]]\n\nThe //Field Buttons// the Wizard is talking about are those four on the right: ''Month'', ''Subject'', ''Student'' and ''Score''. The idea is that you click on a button. Hold down your left mouse button and drag to an area on the left. We're going to drag one button to the //Column area//, one to the //Row area//, and one to the //Data area//.\n\nIn the //Row area//, we'll put ''Month''; in the //Column area//, we'll put ''Subject'', and in the //Data area// we'll put ''Score''. We'll do something with the ''Student button'' after the Pivot Table has been constructed.\n\nSo do the following:\n#Click on ''Month''\n#Hold down your left mouse button\n#With the mouse button held down, drag the mouse pointer over to the //Row area//\n#Let go of the button when it's there\n#A button will appear in the //Row area//\n#Hold Down the left Mouse button and drag\n#Drag the mouse pointer over to the //Row area//\n#Let go of the left mouse button when the pointer is over //Row//\n#When you have the ''Month'' button in place, drag the ''Subject'' button to the ''Column'' area, and the ''Score'' button to the //Data area//. \n\nYour dialogue box will then look like this:\n\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT10.jpg]]\n\nClick ''OK'' when your dialogue box looks like the one above. You will be taken back to Step Three of the Wizard. Click the ''Finish'' button and you're done. You'll then have a spreadsheet that looks like this one:\n\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT11.jpg]]\n\nIf you don't see the ''Pivot Table toolbar'', click on ''View > Toolbars > Pivot Table''.\n\nWe're now going to put the Students button on the Pivot Table. So do the following:\n#Locate the Student button on the Pivot Table toolbar, as in the image below:\n\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT12.jpg]]\n\n#Hold down your left mouse button on the Student button\n#Keep the left mouse button held down\n#Drag the Student button to the top of the Pivot table, where it says "Drag Page Fields Here."\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT13.jpg]]\n\n4. Let go of the left mouse button\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT14.jpg]]\n\n5. Excel adds the Student field to the pivot table\n\nTake a look at the scores. What the Pivot table is doing is adding all the scores up. That's because of cell A3. Notice that it says //"Sum of Score"//. We don't want it to do that. An //Average// is much better for our purposes.\n\nTo change the //Scores to Averages//, do this:\n#On the Pivot Table toolbar, click on the Pivot Table button\n#A menu pops up like the one below:\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT15.jpg]]\n3. To change the Scores to Averages, click on Field Settings\nThe following dialogue box appears:\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT16.jpg]]\n\nThere are not too many functions to choose from in the Summarize by list, but //Average// is on there. So click on //Average//, and then click ''OK''. The scores will change on the spreadsheet.\n\nSome of the scores in the //Grand Total Row// and //Grand Total column// will be a bit long. But you can format the numbers to in the usual way.\n#So highlight the //Grand Total row//\n#From the Excel Menu Bar, click on ''Format''\n#From the drop down menu, click on ''Cells''\n#When the dialogue box appears, select the ''Number'' tab strip\n#Format to 1 decimal place\n#Do the same for the //Grand Total row//\nYour Pivot Table should now be looking like the one below:\n\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT17.jpg]]\n\nWe can now take a look at those drop down boxes. We'll start with the ''Student'' box.\n\nAt the moment, the ''Student'' box says All. Click the black down arrow to see the list of students.\n\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT18.jpg]]\n\nOur two ''Students'' are listed there. Click on ''Elisa'', then click the ''OK'' button. Notice how your spreadsheet has changed. It should now only be showing you ''Elisa'''s results. Click the black down arrow in cell B1 again, and click on ''Mary''. Then click the ''OK'' button. Your spreadsheet will change to show only ''Mary'''s results.\n\nTry clicking the black down arrow of ''Subject'', in cell B3. You should see this:\n\n[img[http://i34.photobucket.com/albums/d146/taorist/PIVOT19.jpg]]\n\nAll the ''Subjects'' have ticks in them. Click on a tick and it will disappear. Try un-ticking a few of the subjects. Then click the ''OK'' button to see what happens.\n\nThe ''Month'' list in cell A4 shows a similar list with ticks in them. Un-tick a month and see the results when you click ''OK''.\n\nAnother thing you can do is change the type of ''Pivot Table Report''. From the Pivot Table toolbar, click the ''Pivot Table'' button. From the menu that pops up, select ''Format Report''. Click on any of the formats you like then click ''OK'' to see what happens. If you don't like what you see, click ''Edit > Undo ~AutoFormat'' to get back to your Pivot Table.\n\n\n
/***\nKeep just two tiddlers open a time, the one you clicked on and the one containing the link you just clicked.\nAs suggested by Elise Springer.\n***/\n//{{{\nversion.extensions.StepWiseNavigation = { major: 1, minor: 0, revision: 1,\n date: new Date(2006,4,27),\n source: "http://simonbaird.com/mptw/#StepWiseNavigation"\n};\n\nif (config.options.chkStepWiseNavigationOn == undefined)\n config.options.chkStepWiseNavigationOn = true;\n\nconfig.shadowTiddlers.AdvancedOptions +=\n "\sn<<option chkStepWiseNavigationOn>> StepWiseNavigation";\n\nStory.prototype.displayTiddler_orig_stepwise=Story.prototype.displayTiddler;\nStory.prototype.displayTiddler = function(srcElement,title,template,animate,slowly) {\n if (config.options.chkStepWiseNavigationOn && srcElement && this.findContainingTiddler(srcElement))\n this.closeAllTiddlers(this.findContainingTiddler(srcElement).getAttribute("tiddler"));\n this.displayTiddler_orig_stepwise(srcElement,title,template,animate,slowly)\n}\n\n//}}}\n
Type the text for 'Text'
An Excel formula can do more than just arithmetic. Excel gives you access to a whole range of other functionality via functions.\nEarlier you used the SUM function to add up values for a range of cells. Let's look at that formula again:\n\n''=SUM (C2:C16)''\n\n!!!Functions Can Have Arguments\nTo use a function in a formula you:\n#hit the ''"="'' button,\n#type the function name, \n#then an open parenthesis ''"("'', some stuff, and closing parenthesis ''")"''. \n#In between the parentheses you type the function's arguments. This example has one argument: the cell range ''"C2:C16"''.\n!!!Functions Return Values\nThe result of this particular function, with the given argument, for our example spreadsheet, is 76.3. We say that the function ''"returns"'' 76.3, and in general, the SUM function returns the sum of the cells in its arguments.\nTo break down our example formula:\n\n''[[=]] [[SUM]][[(C2:C16)]]''\n \n!!Autofill And Cell References\n!!!Autofill By Dragging\nGo back to the example sheet. In cell D1, type the heading "Cost in cents". Now click in cell D2 and type this formula:\n=C2*100\n..and hit Enter. The formula multiplies the value in C2 by 100. Now, click back in D2 and look at the dark border Excel puts around the cell to show you what cell you clicked. See the small black square in the bottom right corner? It's called the fill handle. Hover your mouse over the little black square. When your mouse cursor turns into a black cross, click the mouse button down and drag the mouse pointer down to near the bottom of cell D15.\nRelease the mouse button and you should see column D fill up with amounts in cents; this feature is called Auto Fill. Click on one of the cells in column D and check the formula in the formula bar. The formula in D13 reads:\n=C13*100\nExcel is smart enough to look at the cell reference in your original formula from cell D2, and update it to look at the right cell in column C. Most of the time, this is exactly what you want.\nOccasionally you don't want Excel to fiddle with certain cell references in your formulae; here's an example of how to solve this problem.\nLet's say I want to compare lunch costs with my stockbroker friend in London; I'll need to do some currency conversion.\nIn cell E1, type in an exchange rate for AUD to GBP. As I write this 1 Aussie dollar is worth about 44 English pence, so type 0.44 into E1.\nNow type this formula into E2:\n=C2*E1\nIt looks like I spent about ₤1.58 on Monday's lunch; I bet my Pommy mate spent more that that on his sushi! Now we want to autofill the other days, which is good because I can demonstrate a different way to do autofilling.\n!!!Autofill By Double Clicking\nClick in E2 and hover your mouse over the fill handle like before. This time, don't drag, just double-click the fill handle. Zap! And hmm.. it autofilled alright, but it doesn't look like the numbers are right.\nOK you've probably guessed the problem; verify your guess by clicking in a cell below E2 in the column. The formula in E11 is:\n=C11*E10\n..it's looking at the right cell in column C, but it's getting the exchange rate from E10. No wonder the results look crazy.\n!!!Absolute Cell References\nTo fix this autofill problem, go back to cell E2 and change the formula to this:\n=C2*E$1\nThe dollar sign here might be new to you. Inside a cell reference like this, the dollar sign tells Excel to not fiddle with the next bit of the reference. In this formula we tell Excel that the row component of the reference "E1" should be left alone.\nIn Excel parlance, that makes the row component "absolute". If we say "$E$1" then the entire cell reference is absolute. The opposite of absolute is "relative"; E1 is a relative reference, $E1 has an absolute column but a relative row, and $E$1 is an absolute reference. Got it? Let's finish off the example then..\nOk so you have an absolute reference to your exchange rate entered into E2. All you need now is to double click the fill handle on E2 (the dark box in the bottom right corner). It doesn't matter that there's formulae in the cells below already; they will all get replaced.\nNow you should be seeing the right values, and I can email Sebastian about the cost of living in London.\nWhat's next\nNow we've covered all the concepts of using Excel, the next sections can start building skills you will be able to use in the real world.\n
The first method involves entering a simple formula in another identically sized and shaped range. The best part of this method is that we can add the formulas in one step without having to copy and paste.\n#Using the above ranges to compare select the range ''E1:G7'' starting from cell ''E1''. This ensures that ''E1'' is the //Active cell// in the selection.\n#With this range selected click in the Formula Bar and type in: ''=A1=A9''\n#Now enter this formula by pushing ''Ctrl+Enter'' at the same time\n#You should now see the range ''E1:G7'' filled with //True// (the same) and //False// (not the same).
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |\n| 21/7/2006 14:31:29 | RoBert | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BWorking%20with%20Charts%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 21/7/2006 14:31:52 | RoBert | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BWorking%20with%20Charts%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 21/7/2006 17:6:6 | TaoRist | [[MS%20Excel%20Presentation.htm|file:///C:/Documents%20and%20Settings/rob.DIWASIA-A/Desktop/MS%20Excel%20Presentation.htm]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 21/7/2006 17:6:43 | TaoRist | [[MS%20Excel%20Presentation.htm|file:///C:/Documents%20and%20Settings/rob.DIWASIA-A/Desktop/MS%20Excel%20Presentation.htm]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 21/7/2006 17:7:27 | TaoRist | [[MS%20Excel%20Presentation.htm|file:///C:/Documents%20and%20Settings/rob.DIWASIA-A/Desktop/MS%20Excel%20Presentation.htm]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 24/7/2006 8:8:4 | TaoRist | [[MS%20Excel%20Presentation.htm|file:///C:/Documents%20and%20Settings/rob.DIWASIA-A/Desktop/MS%20Excel%20Presentation.htm]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 10:25:27 | TaoRist | [[MS%20Excel%20Presentation.htm|file:///C:/Documents%20and%20Settings/rob.DIWASIA-A/Desktop/MS%20Excel%20Presentation.htm]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 24/7/2006 11:13:19 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 11:24:28 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 11:30:11 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 11:50:26 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 24/7/2006 14:40:52 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 14:50:46 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 15:44:46 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 15:58:7 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 24/7/2006 17:16:6 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 26/7/2006 8:52:3 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 26/7/2006 13:29:47 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 26/7/2006 13:32:29 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 26/7/2006 17:1:51 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Worksheets]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 26/7/2006 17:2:5 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Worksheets]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 26/7/2006 17:12:54 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Worksheets]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 26/7/2006 17:41:1 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Worksheets]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 27/7/2006 10:18:2 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 27/7/2006 10:18:18 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 10:21:57 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 11:20:9 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 11:26:1 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 13:46:56 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 27/7/2006 14:28:34 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 27/7/2006 14:28:53 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 14:31:17 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 27/7/2006 17:45:36 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 17:53:45 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 18:21:57 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 27/7/2006 18:45:8 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 28/7/2006 10:3:9 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 28/7/2006 16:57:46 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 28/7/2006 17:16:58 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 28/7/2006 17:23:29 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 29/7/2006 12:56:11 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BWithin%20a%20worksheet%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 29/7/2006 15:27:19 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BWithin%20a%20worksheet%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 9:20:2 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 9:31:55 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 9:32:20 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 9:43:35 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 9:49:35 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 9:54:33 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 10:3:29 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 10:11:45 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 11:14:8 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:10 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:10 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:11 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:11 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:11 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:15 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:15 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:15 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:16 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:16 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 31/7/2006 11:14:16 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BSorting%20more%20than%204%20items%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok | Ok | Ok | Ok | Ok | Ok | Ok | Ok | Ok | Ok | Ok | Ok |\n| 31/7/2006 12:43:23 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Sorting]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 17:46:38 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Sorting]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 31/7/2006 18:47:44 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Sorting]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 1/8/2006 11:27:48 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 11:58:2 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 15:28:50 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 18:30:25 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 18:41:32 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 18:53:19 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 18:55:47 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 19:7:46 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 19:8:30 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Examples]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 19:8:39 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Examples]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 19:13:31 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Examples]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 1/8/2006 19:26:30 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#Examples]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 2/8/2006 9:13:22 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 2/8/2006 9:15:12 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 2/8/2006 10:51:13 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 4/8/2006 15:57:12 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 4/8/2006 16:15:30 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 4/8/2006 16:41:33 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 4/8/2006 17:26:40 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BHow%20do%20I%20create%20one%3F%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 4/8/2006 17:33:39 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BHow%20do%20I%20create%20one%3F%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . | Ok |\n| 4/8/2006 17:59:34 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/#%5B%5BHow%20do%20I%20create%20one%3F%5D%5D]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |\n| 11/8/2006 15:55:2 | TaoRist | [[/|http://tiddlyspot.com/exceltraining/]] | [[store.cgi|http://tiddlyspot.com/exceltraining/store.cgi]] | . | index.html | . |
/***\n<<tiddler UploadPluginDoc>>\n!Code\n***/\n//{{{\nversion.extensions.UploadPlugin = {\n major: 3, minor: 3, revision: 3, \n date: new Date(2006,6,30),\n type: 'macro',\n source: 'http://tiddlywiki.bidix.info/#UploadPlugin',\n docs: 'http://tiddlywiki.bidix.info/#UploadPluginDoc'\n};\n//}}}\n\n////+++!![config.lib.file]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.file) config.lib.file= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.file.dirname = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(0, lastpos);\n } else {\n return filePath.substring(0, filePath.lastIndexOf("\s\s"));\n }\n};\nconfig.lib.file.basename = function (filePath) {\n var lastpos;\n if ((lastpos = filePath.lastIndexOf("#")) != -1) \n filePath = filePath.substring(0, lastpos);\n if ((lastpos = filePath.lastIndexOf("/")) != -1) {\n return filePath.substring(lastpos + 1);\n } else\n return filePath.substring(filePath.lastIndexOf("\s\s")+1);\n};\nwindow.basename = function() {return "@@deprecated@@";};\n//}}}\n////===\n\n////+++!![config.lib.log]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.log) config.lib.log= {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\nconfig.lib.Log = function(tiddlerTitle, logHeader) {\n if (version.major < 2)\n this.tiddler = store.tiddlers[tiddlerTitle];\n else\n this.tiddler = store.getTiddler(tiddlerTitle);\n if (!this.tiddler) {\n this.tiddler = new Tiddler();\n this.tiddler.title = tiddlerTitle;\n this.tiddler.text = "| !date | !user | !location |" + logHeader;\n this.tiddler.created = new Date();\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[tiddlerTitle] = this.tiddler;\n else\n store.addTiddler(this.tiddler);\n }\n return this;\n};\n\nconfig.lib.Log.prototype.newLine = function (line) {\n var now = new Date();\n var newText = "| ";\n newText += now.getDate()+"/"+(now.getMonth()+1)+"/"+now.getFullYear() + " ";\n newText += now.getHours()+":"+now.getMinutes()+":"+now.getSeconds()+" | ";\n newText += config.options.txtUserName + " | ";\n var location = document.location.toString();\n var filename = config.lib.file.basename(location);\n if (!filename) filename = '/';\n newText += "[["+filename+"|"+location + "]] |";\n this.tiddler.text = this.tiddler.text + "\sn" + newText;\n this.addToLine(line);\n};\n\nconfig.lib.Log.prototype.addToLine = function (text) {\n this.tiddler.text = this.tiddler.text + text;\n this.tiddler.modifier = config.options.txtUserName;\n this.tiddler.modified = new Date();\n if (version.major < 2)\n store.tiddlers[this.tiddler.tittle] = this.tiddler;\n else {\n store.addTiddler(this.tiddler);\n story.refreshTiddler(this.tiddler.title);\n store.notify(this.tiddler.title, true);\n }\n if (version.major < 2)\n store.notifyAll(); \n};\n//}}}\n////===\n\n////+++!![config.lib.options]\n\n//{{{\nif (!config.lib) config.lib = {};\nif (!config.lib.options) config.lib.options = {\n author: 'BidiX',\n version: {major: 0, minor: 1, revision: 0}, \n date: new Date(2006,3,9)\n};\n\nconfig.lib.options.init = function (name, defaultValue) {\n if (!config.options[name]) {\n config.options[name] = defaultValue;\n saveOptionCookie(name);\n }\n};\n//}}}\n////===\n\n////+++!![PasswordTweak]\n\n//{{{\nversion.extensions.PasswordTweak = {\n major: 1, minor: 0, revision: 2, date: new Date(2006,3,11),\n type: 'tweak',\n source: 'http://tiddlywiki.bidix.info/#PasswordTweak'\n};\n//}}}\n/***\n!!config.macros.option\n***/\n//{{{\nconfig.macros.option.passwordCheckboxLabel = "Save this password on this computer";\nconfig.macros.option.passwordType = "password"; // password | text\n\nconfig.macros.option.onChangeOption = function(e)\n{\n var opt = this.getAttribute("option");\n var elementType,valueField;\n if(opt) {\n switch(opt.substr(0,3)) {\n case "txt":\n elementType = "input";\n valueField = "value";\n break;\n case "pas":\n elementType = "input";\n valueField = "value";\n break;\n case "chk":\n elementType = "input";\n valueField = "checked";\n break;\n }\n config.options[opt] = this[valueField];\n saveOptionCookie(opt);\n var nodes = document.getElementsByTagName(elementType);\n for(var t=0; t<nodes.length; t++) {\n var optNode = nodes[t].getAttribute("option");\n if (opt == optNode) \n nodes[t][valueField] = this[valueField];\n }\n }\n return(true);\n};\n\nconfig.macros.option.handler = function(place,macroName,params)\n{\n var opt = params[0];\n var size = 15;\n if (params[1])\n size = params[1];\n if(config.options[opt] === undefined) {\n return;}\n var c;\n switch(opt.substr(0,3)) {\n case "txt":\n c = document.createElement("input");\n c.onkeyup = this.onChangeOption;\n c.setAttribute ("option",opt);\n c.size = size;\n c.value = config.options[opt];\n place.appendChild(c);\n break;\n case "pas":\n // input password\n c = document.createElement ("input");\n c.setAttribute("type",config.macros.option.passwordType);\n c.onkeyup = this.onChangeOption;\n c.setAttribute("option",opt);\n c.size = size;\n c.value = config.options[opt];\n place.appendChild(c);\n // checkbox link with this password "save this password on this computer"\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option","chk"+opt);\n place.appendChild(c);\n c.checked = config.options["chk"+opt];\n // text savePasswordCheckboxLabel\n place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel));\n break;\n case "chk":\n c = document.createElement("input");\n c.setAttribute("type","checkbox");\n c.onclick = this.onChangeOption;\n c.setAttribute("option",opt);\n place.appendChild(c);\n c.checked = config.options[opt];\n break;\n }\n};\n//}}}\n/***\n!! Option cookie stuff\n***/\n//{{{\nwindow.loadOptionsCookie_orig_PasswordTweak = window.loadOptionsCookie;\nwindow.loadOptionsCookie = function()\n{\n var cookies = document.cookie.split(";");\n for(var c=0; c<cookies.length; c++) {\n var p = cookies[c].indexOf("=");\n if(p != -1) {\n var name = cookies[c].substr(0,p).trim();\n var value = cookies[c].substr(p+1).trim();\n switch(name.substr(0,3)) {\n case "txt":\n config.options[name] = unescape(value);\n break;\n case "pas":\n config.options[name] = unescape(value);\n break;\n case "chk":\n config.options[name] = value == "true";\n break;\n }\n }\n }\n};\n\nwindow.saveOptionCookie_orig_PasswordTweak = window.saveOptionCookie;\nwindow.saveOptionCookie = function(name)\n{\n var c = name + "=";\n switch(name.substr(0,3)) {\n case "txt":\n c += escape(config.options[name].toString());\n break;\n case "chk":\n c += config.options[name] ? "true" : "false";\n // is there an option link with this chk ?\n if (config.options[name.substr(3)]) {\n saveOptionCookie(name.substr(3));\n }\n break;\n case "pas":\n if (config.options["chk"+name]) {\n c += escape(config.options[name].toString());\n } else {\n c += "";\n }\n break;\n }\n c += "; expires=Fri, 1 Jan 2038 12:00:00 UTC; path=/";\n document.cookie = c;\n};\n//}}}\n/***\n!! Initializations\n***/\n//{{{\n// define config.options.pasPassword\nif (!config.options.pasPassword) {\n config.options.pasPassword = 'defaultPassword';\n window.saveOptionCookie('pasPassword');\n}\n// since loadCookies is first called befor password definition\n// we need to reload cookies\nwindow.loadOptionsCookie();\n//}}}\n////===\n\n////+++!![config.macros.upload]\n\n//{{{\nconfig.macros.upload = {\n accessKey: "U",\n formName: "UploadPlugin",\n contentType: "text/html;charset=UTF-8",\n defaultStoreScript: "store.php"\n};\n\n// only this two configs need to be translated\nconfig.macros.upload.messages = {\n aboutToUpload: "About to upload TiddlyWiki to %0",\n errorDownloading: "Error downloading",\n errorUploadingContent: "Error uploading content",\n fileNotFound: "file to upload not found",\n fileNotUploaded: "File %0 NOT uploaded",\n mainFileUploaded: "Main TiddlyWiki file uploaded to %0",\n urlParamMissing: "url param missing",\n rssFileNotUploaded: "RssFile %0 NOT uploaded",\n rssFileUploaded: "Rss File uploaded to %0"\n};\n\nconfig.macros.upload.label = {\n promptOption: "Save and Upload this TiddlyWiki with UploadOptions",\n promptParamMacro: "Save and Upload this TiddlyWiki in %0",\n saveLabel: "save to web", \n saveToDisk: "save to disk",\n uploadLabel: "upload" \n};\n\nconfig.macros.upload.handler = function(place,macroName,params){\n // parameters initialization\n var storeUrl = params[0];\n var toFilename = params[1];\n var backupDir = params[2];\n var uploadDir = params[3];\n var username = params[4];\n var password; // for security reason no password as macro parameter\n var label;\n if (document.location.toString().substr(0,4) == "http")\n label = this.label.saveLabel;\n else\n label = this.label.uploadLabel;\n var prompt;\n if (storeUrl) {\n prompt = this.label.promptParamMacro.toString().format([this.dirname(storeUrl)]);\n }\n else {\n prompt = this.label.promptOption;\n }\n createTiddlyButton(place, label, prompt, \n function () {\n config.macros.upload.upload(storeUrl, toFilename, uploadDir, backupDir, username, password); \n return false;}, \n null, null, this.accessKey);\n};\nconfig.macros.upload.UploadLog = function() {\n return new config.lib.Log('UploadLog', " !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |" );\n};\nconfig.macros.upload.UploadLog.prototype = config.lib.Log.prototype;\nconfig.macros.upload.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) {\n var line = " [[" + config.lib.file.basename(storeUrl) + "|" + storeUrl + "]] | ";\n line += uploadDir + " | " + toFilename + " | " + backupDir + " |";\n this.newLine(line);\n};\nconfig.macros.upload.UploadLog.prototype.endUpload = function() {\n this.addToLine(" Ok |");\n};\nconfig.macros.upload.basename = config.lib.file.basename;\nconfig.macros.upload.dirname = config.lib.file.dirname;\nconfig.macros.upload.upload = function(storeUrl, toFilename, uploadDir, backupDir, username, password)\n{\n // parameters initialization\n storeUrl = (storeUrl ? storeUrl : config.options.txtUploadStoreUrl);\n toFilename = (toFilename ? toFilename : config.options.txtUploadFilename);\n backupDir = (backupDir ? backupDir : config.options.txtUploadBackupDir);\n uploadDir = (uploadDir ? uploadDir : config.options.txtUploadDir);\n username = (username ? username : config.options.txtUploadUserName);\n password = config.options.pasUploadPassword; // for security reason no password as macro parameter\n if (storeUrl === '') {\n config.macros.upload.defaultStoreScript;\n }\n if (config.lib.file.dirname(storeUrl) === '') {\n storeUrl = config.lib.file.dirname(document.location.toString())+'/'+storeUrl;\n }\n if (toFilename === '') {\n toFilename = config.lib.file.basename(document.location.toString());\n }\n\n clearMessage();\n // only for forcing the message to display\n if (version.major < 2)\n store.notifyAll();\n if (!storeUrl) {\n alert(config.macros.upload.messages.urlParamMissing);\n return;\n }\n \n var log = new this.UploadLog();\n log.startUpload(storeUrl, toFilename, uploadDir, backupDir);\n if (document.location.toString().substr(0,5) == "file:") {\n saveChanges();\n }\n displayMessage(config.macros.upload.messages.aboutToUpload.format([this.dirname(storeUrl)]), this.dirname(storeUrl));\n this.uploadChanges(storeUrl, toFilename, uploadDir, backupDir, username, password);\n if(config.options.chkGenerateAnRssFeed) {\n //var rssContent = convertUnicodeToUTF8(generateRss());\n var rssContent = generateRss();\n var rssPath = toFilename.substr(0,toFilename.lastIndexOf(".")) + ".xml";\n this.uploadContent(rssContent, storeUrl, rssPath, uploadDir, '', username, password, \n function (responseText) {\n if (responseText.substring(0,1) != '0') {\n displayMessage(config.macros.upload.messages.rssFileNotUploaded.format([rssPath]));\n }\n else {\n if (uploadDir) {\n rssPath = uploadDir + "/" + config.macros.upload.basename(rssPath);\n } else {\n rssPath = config.macros.upload.basename(rssPath);\n }\n displayMessage(config.macros.upload.messages.rssFileUploaded.format(\n [config.macros.upload.dirname(storeUrl)+"/"+rssPath]), config.macros.upload.dirname(storeUrl)+"/"+rssPath);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n });\n }\n return;\n};\n\nconfig.macros.upload.uploadChanges = function(storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var original;\n if (document.location.toString().substr(0,4) == "http") {\n original = this.download(storeUrl, toFilename, uploadDir, backupDir, username, password);\n return;\n }\n else {\n // standard way : Local file\n \n original = loadFile(getLocalPath(document.location.toString()));\n if(window.Components) {\n // it's a mozilla browser\n try {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]\n .createInstance(Components.interfaces.nsIScriptableUnicodeConverter);\n converter.charset = "UTF-8";\n original = converter.ConvertToUnicode(original);\n }\n catch(e) {\n }\n }\n }\n //DEBUG alert(original);\n this.uploadChangesFrom(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password);\n};\n\nconfig.macros.upload.uploadChangesFrom = function(original, storeUrl, toFilename, uploadDir, backupDir, \n username, password) {\n var startSaveArea = '<div id="' + 'storeArea">'; // Split up into two so that indexOf() of this source doesn't find it\n var endSaveArea = '</d' + 'iv>';\n // Locate the storeArea div's\n var posOpeningDiv = original.indexOf(startSaveArea);\n var posClosingDiv = original.lastIndexOf(endSaveArea);\n if((posOpeningDiv == -1) || (posClosingDiv == -1))\n {\n alert(config.messages.invalidFileError.format([document.location.toString()]));\n return;\n }\n var revised = original.substr(0,posOpeningDiv + startSaveArea.length) + \n allTiddlersAsHtml() + "\sn\st\st" +\n original.substr(posClosingDiv);\n var newSiteTitle;\n if(version.major < 2){\n newSiteTitle = (getElementText("siteTitle") + " - " + getElementText("siteSubtitle")).htmlEncode();\n } else {\n newSiteTitle = (wikifyPlain ("SiteTitle") + " - " + wikifyPlain ("SiteSubtitle")).htmlEncode();\n }\n revised = revised.replace(new RegExp("<title>[^<]*</title>", "im"),"<title>"+ newSiteTitle +"</title>");\n var response = this.uploadContent(revised, storeUrl, toFilename, uploadDir, backupDir, \n username, password, function (responseText) {\n if (responseText.substring(0,1) != '0') {\n alert(responseText);\n displayMessage(config.macros.upload.messages.fileNotUploaded.format([getLocalPath(document.location.toString())]));\n }\n else {\n if (uploadDir !== '') {\n toFilename = uploadDir + "/" + config.macros.upload.basename(toFilename);\n } else {\n toFilename = config.macros.upload.basename(toFilename);\n }\n displayMessage(config.macros.upload.messages.mainFileUploaded.format(\n [config.macros.upload.dirname(storeUrl)+"/"+toFilename]), config.macros.upload.dirname(storeUrl)+"/"+toFilename);\n var log = new config.macros.upload.UploadLog();\n log.endUpload();\n store.setDirty(false);\n }\n // for debugging store.php uncomment last line\n //DEBUG alert(responseText);\n }\n );\n};\n\nconfig.macros.upload.uploadContent = function(content, storeUrl, toFilename, uploadDir, backupDir, \n username, password, callbackFn) {\n var boundary = "---------------------------"+"AaB03x"; \n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n if (window.netscape){\n try {\n if (document.location.toString().substr(0,4) != "http") {\n netscape.security.PrivilegeManager.enablePrivilege('UniversalBrowserRead');}\n }\n catch (e) { }\n } \n //DEBUG alert("user["+config.options.txtUploadUserName+"] password[" + config.options.pasUploadPassword + "]");\n // compose headers data\n var sheader = "";\n sheader += "--" + boundary + "\sr\snContent-disposition: form-data; name=\s"";\n sheader += config.macros.upload.formName +"\s"\sr\sn\sr\sn";\n sheader += "backupDir="+backupDir\n +";user=" + username \n +";password=" + password\n +";uploaddir=" + uploadDir\n + ";;\sr\sn"; \n sheader += "\sr\sn" + "--" + boundary + "\sr\sn";\n sheader += "Content-disposition: form-data; name=\s"userfile\s"; filename=\s""+toFilename+"\s"\sr\sn";\n sheader += "Content-Type: " + config.macros.upload.contentType + "\sr\sn";\n sheader += "Content-Length: " + content.length + "\sr\sn\sr\sn";\n // compose trailer data\n var strailer = new String();\n strailer = "\sr\sn--" + boundary + "--\sr\sn";\n var data;\n data = sheader + content + strailer;\n //request.open("POST", storeUrl, true, username, password);\n request.open("POST", storeUrl, true);\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if (request.status == 200)\n callbackFn(request.responseText);\n else\n alert(config.macros.upload.messages.errorUploadingContent);\n }\n };\n request.setRequestHeader("Content-Length",data.length);\n request.setRequestHeader("Content-Type","multipart/form-data; boundary="+boundary);\n request.send(data); \n};\n\n\nconfig.macros.upload.download = function(uploadUrl, uploadToFilename, uploadDir, uploadBackupDir, \n username, password) {\n var request;\n try {\n request = new XMLHttpRequest();\n } \n catch (e) { \n request = new ActiveXObject("Msxml2.XMLHTTP"); \n }\n try {\n if (uploadUrl.substr(0,4) == "http") {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");\n }\n else {\n netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");\n }\n } catch (e) { }\n //request.open("GET", document.location.toString(), true, username, password);\n request.open("GET", document.location.toString(), true);\n request.onreadystatechange = function () {\n if (request.readyState == 4) {\n if(request.status == 200) {\n config.macros.upload.uploadChangesFrom(request.responseText, uploadUrl, \n uploadToFilename, uploadDir, uploadBackupDir, username, password);\n }\n else\n alert(config.macros.upload.messages.errorDownloading.format(\n [document.location.toString()]));\n }\n };\n request.send(null);\n};\n\n//}}}\n////===\n\n////+++!![Initializations]\n\n//{{{\nconfig.lib.options.init('txtUploadStoreUrl','store.php');\nconfig.lib.options.init('txtUploadFilename','');\nconfig.lib.options.init('txtUploadDir','');\nconfig.lib.options.init('txtUploadBackupDir','');\nconfig.lib.options.init('txtUploadUserName',config.options.txtUserName);\nconfig.lib.options.init('pasUploadPassword','');\nconfig.shadowTiddlers.UploadPluginDoc = "[[Full Documentation|http://tiddlywiki.bidix.info/l#UploadPluginDoc ]]\sn"; \n\n\n//}}}\n////===\n\n////+++!![Core Hijacking]\n\n//{{{\nconfig.macros.saveChanges.label_orig_UploadPlugin = config.macros.saveChanges.label;\nconfig.macros.saveChanges.label = config.macros.upload.label.saveToDisk;\n\nconfig.macros.saveChanges.handler_orig_UploadPlugin = config.macros.saveChanges.handler;\n\nconfig.macros.saveChanges.handler = function(place)\n{\n if ((!readOnly) && (document.location.toString().substr(0,4) != "http"))\n createTiddlyButton(place,this.label,this.prompt,this.onClick,null,null,this.accessKey);\n}\n\n//}}}\n////===
''VALUE( text )''\nconverts text into a number. Excel is quite good at handling varying text formats.\n*VALUE("$ 12,765") = 12765\n*VALUE("2 1/4") = 2.25\n*VALUE("11 Dec, 2005") = 38697 (read [[Date]] Functions if this seems weird)\n
Download this ''[[File|http://www.4shared.com/file/2822293/cba20915/vlookup_sample.html]]''\n''VLOOKUP([[lookup value]],[[table array]],[[col index num]],[[range lookup]])''\n\nTable_array is the table of information in which data is looked up. Use a reference to a range or a range name, such as Database or List.\nSay, you want a information to "automagically" appear in your Excel file, look no further!\n\nYou have a Database already set up in E1. This is the source of your information.\n\nAs you can see on ''A4 to A5'', this is where you'll be inputting the Item No. and quantity. You want the price to automagically appear on ''C4''.\n\nHow do we do it?\n#go to where the information will appear, ''C4''.\n#type in "=vlookup"\n#type in the [[lookup value]] which is ''A4''.\n#type in the [[table array]] which is ''$E$3:$G$10''.\n#type in the [[col index num]] which is''3''\n#type in the [[range lookup]] which is ''False''--meaning that it has to be an EXACT match.\n#type ''*b4'' because the total cost of the goods will depend on the quantity.\n# it should look like this ''=vlookup(a4, e3:g10, 3, false)*b4''\n#hit Enter. At first you will an ''#N?A'' in ''C4'', that's ok. \n#input on ''A4'' any of the available ITEM#s from ''E4 to E9'', then add in any number in the QTY. cells.\n\nYou should see something appear in the ''C4'' cell.\n\nThis will work even if the Database or List is on another sheet or another workbook.\n\n^^from:http://www.personal-computer-tutor.com/vlookup.htm^^
A pivot chart is an interactive graphical representation of the data in a Pivot Table.
A __''Pivot table''__ is a way to extract data from a long list of information, and present it in a readable form.\n\n^^from:http://www.homeandlearn.co.uk/ME/mes9p4.html^^
A ''[[Video|http://www.pivottableguru.com/lessonplayer.aspx?id=free_b001&res=lo]]'' Overview\n
You can rearrange the layout, select a different type of chart, and add or remove data.
#[[Creating a Chart]]\n#[[Modifying a Chart]]\n#[[Previewing and Printing a Chart]]
[[Linking]]\n[[Comparing]]\n[[Sharing]]\n[[Merging]]\n[[Sorting]]\n[[Filtering]]
Col index num is the column number in table array from which the matching value must be returned. A col index num of 1 returns the value in the first column in [[table array]]; a col index num of 2 returns the value in the second column in [[table array]], and so on. If col index num is less than 1, VLOOKUP returns the #VALUE! error value; if col index num is greater than the number of columns in [[table array]], VLOOKUP returns the #REF! error value.
''Lookup value'' is the value to be found in the first column of the array. Lookup value can be a value, a reference, or a text string.\n
Range lookup is a logical value that specifies whether you want VLOOKUP to find an exact match or an approximate match. If TRUE or omitted, an approximate match is returned. In other words, if an exact match is not found, the next largest value that is less than lookup value is returned. If FALSE, VLOOKUP will find an exact match. If one is not found, the error value #N/A is returned.
''Table array'' is the table of information in which data is looked up. Use a reference to a range or a range name, such as Database or List.