<div dir="ltr"><div dir="ltr"><div>Hello,<br><br>I successfully managed to run the WriterDemo example and to connect to the Libre Office from my application. <br>The differences between the .Net Core API and the API used for .Net Framework are astonishing. <br><br>Could you tell me if there is an example of how to get Libre Office version if .Net? I have code which worked with the .net framework, but now the code, listed below, does not work:<br><br><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Any[] VerRequest = new Any[1];</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> VerRequest[0] = new Any(typeof(PropertyValue), new PropertyValue()</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Name = "nodepath",</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Value = new Any("/org.openoffice.Setup/Product")</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> });</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> XMultiServiceFactory ConfProvider = m_HnComponentContext.getServiceManager().query<XMultiServiceFactory>();</div><div> if (ConfProvider != null)</div><div> {</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> XNameAccess ConfAccess = (XNameAccess)ConfProvider.createInstanceWithArguments("com.sun.star.configuration.ConfigurationAccess", VerRequest);</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> if (ConfAccess != null)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> return ConfAccess.getByName("ooSetupVersion").Value as string;</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote><div><br>Besides, there are another couple of issues regarding the SDK. The first is an error while setting up a proprety of a font. The code (modification of the WriterDemo.cs example) is shown below:<br><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> // Create a cursor object</div><div> XTextCursor cursor = simpleText.createTextCursor();</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> cursor.query<XPropertySet>().setPropertyValue("CharWeight", new Any(((float)200)));</div><div> cursor.query<XPropertySet>().setPropertyValue("CharEscapement", new Any((Int16)0));</div><div> cursor.query<XPropertySet>().setPropertyValue("CharEscapementHeight", new Any((Byte)100));</div></blockquote><div><br><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> // Inserting some Text</div><div> text.insertString(cursor, "The first line in the newly created text document.\n", false);</div></blockquote><div><br>The 'Object reference not set to an instance of an object.' occurs on the cursor.query<XPropertySet>().setPropertyValue("CharEscapementHeight", new Any((Byte)100)); line.<br><br>The second issue occures while setting up with of table colimns. The code (modification of the same example) is shown below:<br><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div>void SetColumnWidth(XTextTable textTable,int ColNum, short Width)<br> {<br></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Any obj = textTable.query<XPropertySet>().getPropertyValue("TableColumnSeparators");</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> TableColumnSeparator[] tcs = (TableColumnSeparator[])(obj.Value);</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> short Delta = 0;</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> if (tcs != null)</div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> if (tcs.Length - 1 >= ColNum)</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> if (ColNum == 0)</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Delta = (short)(Width - tcs[ColNum].Position);</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> tcs[ColNum].Position = Width;</div></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> else</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> {</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Delta = (short)(Width - (tcs[ColNum].Position - tcs[ColNum].Position));</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> tcs[ColNum].Position = (short)(Width + tcs[ColNum - 1].Position);</div></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div><br></div></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> Any val = new Any(typeof(com.sun.star.text.TableColumnSeparator[]), tcs);</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> textTable.query<XPropertySet>().setPropertyValue("TableColumnSeparators", val);</div></blockquote></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }</div></blockquote></blockquote><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> }<br></div></blockquote><div>If the function is called in \sdk\examples\dotnet\WriterDemo\csharp\WriterDemo.cs, like listed below:<br><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> // Get first row</div><div> XTableRows tableRows = textTable.getRows();</div><div> Any rowAny = tableRows.query<XIndexAccess>().getByIndex(0);</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> SetColumnWidth(textTable, 1, 200);</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> // Set a different background color for the first row</div><div> XPropertySet firstRowPropertySet = rowAny.cast<XPropertySet>();</div><div> firstRowPropertySet.setPropertyValue("BackTransparent", new Any(false));</div></blockquote><div><br><br>It gives an access violation error ("Attempted to read or write protected memory. This is often an indication that other memory is corrupt") on the line<br><br> textTable.query<XPropertySet>().setPropertyValue("TableColumnSeparators", val);<br><br>When I tried to get the columns of the table via the code below (the code is inserted in the WriterDemo.cs example too):<br><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> // Set the table background color</div><div> XPropertySet tablePropertySet = textTableI.query<XPropertySet>();</div><div> tablePropertySet.setPropertyValue("BackTransparent", new Any(false));</div><div> tablePropertySet.setPropertyValue("BackColor", new Any(0xCCCCFF));</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> XTableColumns tableCols = textTable.getColumns();</div><div> Any colAny = tableCols.query<XIndexAccess>().getByIndex(1);</div></blockquote><div><br></div><blockquote style="margin:0 0 0 40px;border:none;padding:0px"><div> // Get first row</div><div> XTableRows tableRows = textTable.getRows();</div><div> Any rowAny = tableRows.query<XIndexAccess>().getByIndex(0);</div></blockquote><div><br><br>However, the tableCols.query<XIndexAccess>().getByIndex(1) line give another error: <br><br> Exception thrown: 'System.ArgumentException' in net_basetypes.dll<br> An unhandled exception of type 'System.ArgumentException' occurred in net_basetypes.dll<br> Value of Any can only be null if Type is void. Perhaps you want Any.VOID?<br><br><br>Could you tell me what is a proper way to change the table column width using the .Net Core SDK?</div></div>
</div>