🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #9765

Tworzenie dokumentów Excela - problem z modyfikacją komórek

#9765
From: Peri
Date: Wed, 02 Nov 2005 17:14
56 lines
2994 bytes
Witam.
Musze wyeksportować dane do excela. Aby nie dodawać referencji do COM  
Microsoft.Excel robie to tak:

using Microsoft.VisualBasic;	<- Referencja do tego jest w projekcie

string className= "Excel.Application";
Type l_type = Type.GetTypeFromProgID(className);
object l_excelApp = Activator.CreateInstance(l_type);
object l_workbooks = Interaction.CallByName(l_excelApp, "Workbooks",  
CallType.Get);
object l_workbook = Interaction.CallByName(l_workbooks, "Add",  
CallType.Method);
object l_sheet = Interaction.CallByName(l_workbook, "Worksheets",  
CallType.Get, new object[] { 1 });

object l_range = Interaction.CallByName(l_sheet, "Range", CallType.Get,  
new object[] { "A1" });

// w lini poniżej błąd
Interaction.CallByName(l_range, "Value", CallType.Set, new object[] { 10  
});
Interaction.CallByName(l_sheet, "SaveAs", CallType.Method, new object[]  
{ "C:\\temp\\testowyexport2.xls" });
Interaction.CallByName(l_excelApp, "Quit", CallType.Method, new object[]  
{ });

Nie dodaję referencji do tego COM, bo chce uniezależnić ten mechanizm od  
wersji office'a jaka ma zainstalowaną użytkownik aplikacji. Gdybym dodam,  
to linie

object l_sheet = Interaction.CallByName(l_workbook, "Worksheets",  
CallType.Get, new object[] { 1 });
object l_range = Interaction.CallByName(l_sheet, "Range", CallType.Get,  
new object[] { "A1" });

mogę zastąpić

Excel.WorkSheet sheet = WorkBoook.Worksheets[0];
Excel.Range range = sheet.Range("A1");
range.Value = wartosc;

A więc wynika z tego, że Range ma właściwość Value. Jednak korzystając z  
Interaction.CallByName nie moge skorzystaj z jej settera. Z gettera  
korzystam tak.
											| Get
object value = Interaction.CallByName(l_range, "Value", CallType.Get, new  
object[] {});

dostaje null, ale arkusz jest pusty na początku, więc to chyba logiczne.

Natomiast kiedy próbuje skorzystac z settera to dostaję wyjątek  
ComException z komunikatem D_MEMBERNOTFOUND, czy coś podobnego (teraz nie  
siedzę przy tym komputerze) i jakis tam HRESULT. Wie ktoś co to może być?

Peri
Technical Details
Message-ID: <op.szmh51x5y8ffpb@mcs>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail
From: Peri <noemail@serwer.org>
Newsgroups: alt.pl.comp.lang.csharp
Subject: Tworzenie dokumentów Excela - problem z
 modyfikacją komórek
Date: Wed, 02 Nov 2005 18:14:15 +0100
Organization: Onet.pl
Lines: 56
Message-ID: <op.szmh51x5y8ffpb@mcs>
NNTP-Posting-Host: 194.116.130.21
Mime-Version: 1.0
X-Trace: news.onet.pl 1130951650 5959 194.116.130.21 (2 Nov 2005 17:14:10 GMT)
X-Complaints-To: usenet@news.onet.pl
NNTP-Posting-Date: Wed, 2 Nov 2005 17:14:10 +0000 (UTC)
X-Sender: RhCPFAeUCalorx/OvwvBruOxhuhzmRAiw5rYvJJWxow=
X-Antivirus-Status: Clean
X-Antivirus: avast! (VPS 0544-4, 2005-11-02), Outbound message
User-Agent: Opera M2/8.50 (Win32, build 7700)
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit