[Libreoffice] How to create get an XWorksheet from a XSpreadsheet?

Markus Mohrhard markus.mohrhard at googlemail.com
Thu Apr 14 17:40:24 PDT 2011


And again with the patches.

2011/4/15 Markus Mohrhard <markus.mohrhard at googlemail.com>

> Hi Noel,
>
> here is the patch without the conversion from XSpreadsheet to XWorksheet.
>
> I found some nice Code in ScVbaWorkbook::getActiveSheet() where nearly the
> same thing was done. But the following attempt didn't work, and created
> always an error message in getDocUnoModule()
>
> uno::Reference<frame::XModel> xNewModel( getCurrentExcelDoc( mxContext ),
> uno::UNO_SET_THROW );
> ScDocShell* pShell = excel::getDocShell( xNewModel );
> if( !pShell )
> throw uno::RuntimeException();
> ScDocument* pDoc = pShell->GetDocument();
> String aCodeName;
> pDoc->GetCodeName((SCTAB)0 ,aCodeName);
> return uno::Reference< excel::XWorksheet >( getUnoDocModule( aCodeName,
> pShell ), uno::UNO_QUERY_THROW );
>
> With a debugger you see that pShell points to the correct ScDocShell and
> aCodeName points to the CodeName of the ScTable but it still won't work.
>
> Perhabs you know why my idea won't work. Nearly the same code works fine
> with ScVbaWorkbook::getActiveSheet()
>
> Patch is under LGPLv3+/MPL.
>
> Regards,
> Markus
>
> P.S. Even some really strange ways of using the setUpDocumentModules(const
> uno::Reference< sheet::XSpreadsheetDocument >) of vbaworkbooks.cxx produces
> an error. But this seems a good way to solve the problem. If you can give me
> any hints why this won't work I will try again on the conversion
>
>
>
>
>
> 2011/4/14 Noel Power <nopower at novell.com>
>
>> Hi Markus
>>
>> On 14/04/11 00:49, Markus Mohrhard wrote:
>>
>>> Hello,
>>>
>>> I have reworked most of the Code but have now the problem that I have an
>>> instance of XSpreadsheet but need the corresponding XWorksheet object.
>>>
>>> I found one of these conversions at ScVbaWorksheet::getSheetAtOffset but
>>> it needs to call getParent, which will not work in my case because it is for
>>> the new method createSheetCopyInNewDoc. Do you know any way to resolve this
>>> problem?
>>>
>> aha very good!! I didn't think of that, nice catch. Ok, here is what I
>> propose, I think you have suffered enough with this so-called easy hack,
>> just pass null as the parent and lets get the patch reviewed and in. Please
>> do put a #TODO #FIXME in the code where the parent is (NOT) created.
>> The parent should be a Workbook object, problem here is that when you
>> create a new document, just creating a workbook object isn't enough as those
>> parents are by a weakreference and the workbook object you would create
>> would only be temporary.
>> If the new document was created correctly ( e.g. in vba mode ) then we
>> could use the getUnoDocModule() to access the correct Workbook instance and
>> pass that instead. I think we need to tweak the existing code more to do
>> that ( some stuff like this is already done in ScWorkbooks::Add ). if you
>> are interested I'd give you some advice/hints on how that should be done and
>> you could do that as a separate hack ( let me know if you are interested in
>> doing that ) Otherwise just open a bug for that part and assign it to me and
>> I will either fix it or create another easy hack from that.
>>
>> thanks for you continued efforts
>> Noel
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20110415/187a033e/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-add-method-Copy-to-ScVbaWorksheets.patch
Type: application/octet-stream
Size: 10569 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20110415/187a033e/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0002-added-method-Copy-to-XWorksheets.patch
Type: application/octet-stream
Size: 1012 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/libreoffice/attachments/20110415/187a033e/attachment-0003.obj>


More information about the LibreOffice mailing list