home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 November / Pcwk1197.iso / LOTUS / Eng-ins / ACROREAD / SUITE / DW09_S6.LSS < prev    next >
Text File  |  1996-07-28  |  6KB  |  154 lines

  1. Option Public
  2. ' Convert text on a page into a table.
  3. ' This script consists of two subs: Main and TableInsert.
  4. ' Main finds the first non-empty text block on
  5. ' the page and converts it into a table. Because  
  6. ' the sub is called Main, it can be run from 
  7. ' an icon as well as by choosing Edit - Script - Run.
  8. ' Alternatively, you could attach the sub to an event,
  9. ' such as the Click event of a placement block.
  10. ' The sub Main calls another sub, TableInsert, to do
  11. ' some work for it. The code for TableInsert follows
  12. ' this sub.
  13. ' Declare global constants.
  14. ' This constant limits the size of the table. The limit  
  15. ' depends on your needs.
  16.  
  17. Const MAX_TABLE_SIZE = 20
  18.  
  19.  
  20. Sub Main
  21. ' Declare variables.
  22.     Dim CurrentRow As Integer
  23.     Dim CurrentCol As Integer
  24.     Dim MyText As String
  25.     Dim MyCellText As String
  26.     Dim MyTable As Table
  27.     Dim MyTextB As TextBlock
  28.     Dim MyBlockId As Integer
  29. ' Check if there is one text block that is not empty
  30. ' on the page. Do this by looping through all 
  31. ' objects on the page and stopping when you find
  32. ' a text block that has something in it.
  33.     Forall MyOb In CurrentPage.Objects
  34.    ' If you find a filled in text block, 
  35.    ' set MyTextB equal to it and exit the
  36.    ' ForAll statement.
  37.         
  38.         If (MyOb.IsText And Len(MyOb.TextBlock.Text) > 0) Then       
  39.             Set MyTextB = MyOb
  40.             Exit Forall
  41.         End If
  42.     End Forall
  43. ' If you have found nothing, then
  44. ' put up a message box letting the user know
  45. ' there is nothing valid on the page and exit the sub.
  46. ' Note, NOTHING is a LotusScript predefined constant; it 
  47. ' is the initial value of an object variable.
  48.     If (MyTextB Is Nothing) Then 
  49.         Messagebox "There are no good text blocks on the page."
  50.         Exit Sub
  51.     End If
  52. ' Initialize the variable MyText to the text 
  53. ' contained in the text block MyTextB.
  54.     MyText = MyTextB.Text 
  55. ' Create the table and fill it with the data.
  56. ' Initalize variables.
  57.     CurrentRow = 1
  58.     CurrentCol = 1
  59. ' Create the table, setting the rows and columns equal
  60. ' to one. Also, select the type of table.
  61.     Set MyTable = _
  62.     CurrentPage.CreateTable(1,CurrentRow,CurrentCol)
  63. ' Figure out how many rows and columns you need.
  64. ' Do this by counting newlines.
  65. ' Parce the text string, MyText, using the length
  66. ' of the text string as the limit of the For loop, and
  67. ' going through each character until a carrage return
  68. ' or a tab is encountered.  When one of these
  69. ' characters is encountered, call the
  70. ' sub TableInsert to put the characters found
  71. ' up to that point into a table cell. If necessary, 
  72. ' the sub TableInsert also expands the table.
  73.     For i = 1 To Len(MyText)
  74.         CurrentChar = Mid$(MyText,i,1)
  75.         
  76.    ' Is the current character a carriage return?
  77.    ' If it is a carriage return, insert text, then
  78.    ' go to next row.
  79.         If (CurrentChar = Chr$(13)) Then
  80.       ' You call the sub TableInsert with the arguments
  81.       ' it requires.  Note, Trim$ removes the leading and
  82.       ' trailing spaces from a text string (in this case,
  83.       ' the text contained in the string MyCellText).
  84.             Call TableInsert(MyTable, _
  85.             Trim$(MyCellText),CurrentRow,CurrentCol)
  86.             CurrentCol = 1 
  87.       ' Increment row number; that is, go down to the 
  88.       ' next row.
  89.             CurrentRow = CurrentRow + 1
  90.       ' Reinitialize the text string variable MyCellText
  91.       ' to the empty string.
  92.             MyCellText = ""
  93.    ' Is it a tab?  If so, follow same steps
  94.    ' as above, but, after inserting text,
  95.    ' instead of moving down, stay in the same row
  96.    ' and move to the next column.
  97.             Elseif (CurrentChar = Chr$(9)) _
  98.         Then
  99.             Call TableInsert(MyTable,_
  100.             Trim$(MyCellText),CurrentRow,CurrentCol)
  101.       ' Increment column number, that 
  102.       ' is, move to next column.
  103.             CurrentCol = CurrentCol + 1 
  104.             MyCellText = ""
  105.    ' If neither, then keep on assembling string.
  106.    ' Also, make sure the character isn't a standard
  107.    ' newline (\n, or Ascii 10).
  108.         Elseif (CurrentChar <> Chr$(10)) Then
  109.     ' Assemble string by adding valid characters.
  110.             MyCellText = MyCellText + CurrentChar
  111.         End If
  112.     Next i
  113. ' Don't forget to fill the very last cell in the table.
  114.     If (Len(Trim$(MyCellText)) > 0) Then
  115.         Call TableInsert(MyTable, _ 
  116.         Trim$(MyCellText),CurrentRow,CurrentCol)
  117.     End If
  118. ' Finally, delete the text block you found at the 
  119. ' beginning of this script and put the table into
  120. ' the placement block that originally held the text block.
  121.     MyBlockID = MyTextB.PlacementBlock.Id 
  122.     MyTextB.Remove
  123.     MyTable.PlacementBlock.PutIntoPlacementBlock(MyBlockId)
  124.     
  125. End Sub
  126. ' This sub, TableInsert, works with the above sub, Main.  
  127. ' The job of TableInsert is to insert text into a table 
  128. ' cell and, if it is necessary, to expand the number of 
  129. ' rows and columns in the table.
  130. ' The table that was created in Main is passed to it, as is
  131. ' the text string and the projected number of rows and 
  132. ' columns in the table.  When the projected number of rows
  133. ' and columns in the table is more than the actual number,
  134. ' this sub adds a row or a column to the table.
  135. Sub TableInsert(ATable As Table, SomeText As String, _
  136. RowNum As Integer, ColNum As Integer)
  137. ' Declare variable.
  138.     Dim MyTableCell As TextBlock
  139. ' Check to see if you were passed a NOTHING reference.
  140.     If (ATable Is Nothing) Then
  141.         Exit Sub
  142.     End If
  143. ' Expand the table if necessary - both cols and rows.
  144.     While(ATable.RowCount < RowNum)
  145.         ATable.InsertRow(ATable.RowCount + 1)
  146.     Wend
  147.     While(ATable.ColCount < ColNum)
  148.         ATable.InsertCol(ATable.ColCount + 1)
  149.     Wend
  150. ' Now, insert the text into the table cell.
  151.     Set MyTableCell = ATable.GetCell(RowNum,ColNum)
  152.     MyTableCell.Text = SomeText
  153. End Sub
  154.