I downloaded Aspose.Words for evaluation. I installed it on my machine and then added a reference to Aspose.Words. Now when I do an imports in my VB code as well as getting Aspose in my imports dropdown list I also get Xenocode and followed by 30 or so entries of square boxes. Can somebody tell me what amy be happening here?
Aspose.Words version is 3.7.1.0
Also one of the things I need to do is replace a bookmark from my document with table generated by my code. Can somebody point me to some sample code.
Ok. here is a code for building table at the specified bookmark:
public void TestBuildTableAtBookmark()
{
Document doc = TestUtil.Open("Doc1.doc");
Bookmark bookmark = doc.Range.Bookmarks["bookmarkName"];
// If bookmark contains any text, the remove it before insertion.
bookmark.Text = "";
AddTableBeforeNode(bookmark.BookmarkEnd);
// Save the results.
string filenameOut = "Doc1 Out.doc";
doc.Save(filenameOut);
// Open the resulting file in MS Word to test results.
System.Diagnostics.Process.Start(filenameOut);
}
private void AddTableBeforeNode(Node node)
{
DocumentBuilder builder = new DocumentBuilder(node.Document);
// builder is positioned to the node
builder.MoveTo(node);
// use builder to insert table
builder.RowFormat.Borders.LineStyle = LineStyle.Single;
builder.StartTable();
builder.InsertCell();
builder.Write("Text1");
builder.InsertCell();
builder.Write("Text2");
builder.EndRow();
builder.EndTable();
}
Thank you for a quick reply. As per your earlier reply I have downloaded v4.0Beta and installed it on my machine. Since eta is just few days away as I have read in one of the forum entries.
I have also tried building the table like you told me in your code but I am getting little strange results. Can I somehow send you the resulting document and maybe you can tell me what I am doing wrong. But here is the code I used to build my table. Basically it builds a 3 column table where the 1st and 3rd column has data and the middle column is blank which will allow me to control the seperation between column 1 and 3.
Private Sub BuildLabTable(ByVal node As Node, ByVal programId As Integer)
Dim oProgramServiceProvider As daProgServiceProvider = New daProgServiceProvider
Dim dsl As DataSet
Dim drl As DataRow
Dim oServiceProvider As daServiceProvider = New daServiceProvider
Dim docBuilder As DocumentBuilder
Dim iLabCount As Integer = 0
Dim iTableRow As Integer = 0
Dim iTableColumn As Integer = 0
dsl = oProgramServiceProvider.GetProgramServiceProviderListByProgramIdOrderedDS(daServiceType.Laboratory, programId, "")
docBuilder = New DocumentBuilder(node.Document)
docBuilder.MoveTo(node)
docBuilder.StartTable()
Dim iLabNumber As Integer = 0
For Each drl In dsl.Tables(0).Rows
oServiceProvider.GetServiceProvider(drl("service\_provider\_id"))
iTableRow = iLabNumber \ 2 + 1
iTableColumn = iLabNumber Mod 2
If iTableColumn = 1 Then
iTableColumn = 3
Else
iTableColumn = 1
End If
docBuilder.InsertCell()
If oServiceProvider.Name.Length > 0 Then
docBuilder.Write(oServiceProvider.Name + Environment.NewLine())
End If
If oServiceProvider.AddressLine1.Length > 0 Then
docBuilder.Write(oServiceProvider.AddressLine1 + Environment.NewLine())
End If
If oServiceProvider.AddressLine2.Length > 0 Then
docBuilder.Write(oServiceProvider.AddressLine2 + Environment.NewLine())
End If
If iTableColumn = 1 Then
docBuilder.InsertCell()
Else
docBuilder.EndRow()
End If
iLabNumber += 1
Next
If iTableColumn = 1 Then
docBuilder.InsertCell()
docBuilder.EndRow()
End If
docBuilder.EndTable()
End Sub
Yes, please attach the resulting file. Go to the ‘Options’ tab of the post editor to attach a file to the composed post.
You can also make the desired table in MS Word and attach the document with it here. I will compose the code required to build it in Aspose.Words for you.
Yes a little bit but it works. I single stepped through my code and it did the right thing. That is it did call EndRow at the right time. I did the code very quickly to test some of the functionality I needed. I can make it little less complicated, add comments and send it to you again if you want.
Private Sub BuildLabTable(ByVal node As Node, ByVal programId As Integer)
Dim oProgramServiceProvider As daProgServiceProvider = New daProgServiceProvider
Dim dsl As DataSet
Dim drl As DataRow
Dim oServiceProvider As daServiceProvider = New daServiceProvider
Dim docBuilder As DocumentBuilder
Dim iLabNumber As Integer = 0
Dim iTableColumn As Integer = 0
'Get list of lab for a given program
dsl = oProgramServiceProvider.GetProgramServiceProviderListByProgramIdOrderedDS(daServiceType.Laboratory, programId, "")
'Init docBuilder with the document
docBuilder = New DocumentBuilder(node.Document)
'Move to the bookmark we want
docBuilder.MoveTo(node)
'Start a new table. This table will have 3 columns. Column 1 and 3 will have lab information
'and column 2 will be used for spacing between column 1 and 3
docBuilder.StartTable()
'For each lab
For Each drl In dsl.Tables(0).Rows
'Get detail info for the lab
oServiceProvider.GetServiceProvider(drl("service\_provider\_id"))
iLabNumber += 1
'Set the column number to the colunm we will be writing the lab data to.
'If lab number is odd then we will be writing to column 1 else we will be writing to column 3
iTableColumn = iLabNumber Mod 2
If iTableColumn = 1 Then
iTableColumn = 1
Else
iTableColumn = 3
End If
'Inset a new table cell and write the lab data into it
docBuilder.InsertCell()
If oServiceProvider.Name.Length > 0 Then
docBuilder.Write(oServiceProvider.Name + Environment.NewLine())
End If
If oServiceProvider.AddressLine1.Length > 0 Then
docBuilder.Write(oServiceProvider.AddressLine1 + Environment.NewLine())
End If
If oServiceProvider.AddressLine2.Length > 0 Then
docBuilder.Write(oServiceProvider.AddressLine2 + Environment.NewLine())
End If
'If we have just written to column 1 then insert a blank column. This is column 2 spaceing
'If we have just written to column 3 then end this row
If iTableColumn = 1 Then
docBuilder.InsertCell()
Else
docBuilder.EndRow()
End If
Next
'If we have just written to column 1 then we need to complete the row by inserting blank cell
'for column 3 and ending the row.
If iTableColumn = 1 Then
docBuilder.InsertCell()
docBuilder.EndRow()
End If
'Finish off the table
docBuilder.EndTable()
End Sub
In your document the table rows are created correctly but are put side-by-side because the section you are inserting in is set to two-columns mode. I mean two text columns, not table columns. Please check you template document and remove the 2-columns setting. Or attach it here, I will look at it myself.