Article View: alt.pl.comp.lang.csharp
Article #9765Tworzenie dokumentów Excela - problem z modyfikacją komórek
From: Peri
Date: Wed, 02 Nov 2005 17:14
Date: Wed, 02 Nov 2005 17:14
56 lines
2994 bytes
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-mailShow 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