login  Naam:   Wachtwoord: 
Registreer je!
 Forum

C# programma slaat cel waarde niet op (Opgelost)

Offline lolll - 01/09/2011 20:04 (laatste wijziging 01/09/2011 20:10)
Avatar van lolllLid Om het mezelf in de toekomst wat gemakkelijker te maken, heb ik 3 klassen geschreven om waardes van een excel document op te vragen of - en daar zit de fout - om waardes in te vullen.
Ik heb een test-programma gemaakt om deze klassen te testen. Het opvragen gaat goed, maar als ik het aanpas wordt de waarde wel lokaal ingevuld (denk ik toch), maar als ik later de excel open zijn er geen wijzigingen aangebracht.
Omdat de code nogal verdeeld is heb ik het op plaatscode gezet:
Klassen: Plaatscode: 141265
TestProgramma: Plaatscode: 141266

Weet iemand wat er precies fout loopt, want volgens google moet je via Value2 of Value wel degelijk een waarde in een cel kunnen stoppen.

Lolll

EDIT:

Structuur van excel(testbestand.xlsx) vergeten:
//A//B//...
1.naam//email
2.eenNaam//eenEmail
......//.....

19 antwoorden

Gesponsorde links
Offline lemoinet - 01/09/2011 21:15
Avatar van lemoinet PHP gevorderde je moet wel je excel-bestand opslaan voor je het afsluit.
Offline lolll - 02/09/2011 20:24
Avatar van lolll Lid Ok, ik heb nu een destructor toegevoegd die de worksheet opslaat en de applicatie sluit. Als ik het programma nu afsluit vraagt hij of ik het bestaande bestand wil vervangen, dan klik ik op ok. Maar als ik het excel-bestand bekijk is er niets gewijzigd. Wat doe ik nog fout?

Destructor:
  1. ~ExcelDocument()
  2. {
  3. ws.SaveAs(filename,
  4. Type.Missing,
  5. Type.Missing,
  6. Type.Missing,
  7. Type.Missing,
  8. Type.Missing,
  9. Type.Missing,
  10. Type.Missing,
  11. Type.Missing,
  12. Type.Missing);
  13. app.Quit();
  14. }

Lolll
Offline larssy1 - 03/09/2011 10:52
Avatar van larssy1 MySQL beginner
lolll schreef:
Ok, ik heb nu een destructor toegevoegd die de worksheet opslaat en de applicatie sluit. Als ik het programma nu afsluit vraagt hij of ik het bestaande bestand wil vervangen, dan klik ik op ok. Maar als ik het excel-bestand bekijk is er niets gewijzigd. Wat doe ik nog fout?

Destructor:
[..code..]
Lolll

Weet niet zeker of het nodig is, maar misschien moet je handmatig schrijfrechten defineren voor je programma.
Offline lolll - 03/09/2011 12:16
Avatar van lolll Lid Hoe zou ik dat dan moeten doen?  Ietsje meer uitleg graag
Offline larssy1 - 03/09/2011 14:12
Avatar van larssy1 MySQL beginner
lolll schreef:
Hoe zou ik dat dan moeten doen?  Ietsje meer uitleg graag

normaal gesproken zou het combineren je scripts in twee delen het moeten oplossen,
Het deel dat schrijf doe je in het bestand van je project Program.cs (console basis) (weet niet of deze hetzelfde is genoemd in elke programmeertaal, en de uitvoer en andere functies zet je gewoon in je eigen class.

programmeren van het 'write' gedeelte voor je programma zou automatisch in Program.cs moeten worden geregeld.

Daarnaast moet je na het schrijven niet het process killen, maar het bestand opslaan, en dan eventueel process stoppen naar de wensen.
Offline lolll - 04/09/2011 16:43
Avatar van lolll Lid @larssy1:
Citaat:
normaal gesproken zou het combineren je scripts in twee delen het moeten oplossen,
Het deel dat schrijf doe je in het bestand van je project Program.cs (console basis) (weet niet of deze hetzelfde is genoemd in elke programmeertaal, en de uitvoer en andere functies zet je gewoon in je eigen class.

programmeren van het 'write' gedeelte voor je programma zou automatisch in Program.cs moeten worden geregeld.

Maar ik heb speciaal een klasse gemaakt die ervoor zorgt dat ik gemakkelijk excel-bestanden kan lezen en schrijven. Dus waarom zou ik die code moeten opsplitsen als ik de functionaliteit ervan met 1 klasse ook kan bereiken?

Citaat:
Daarnaast moet je na het schrijven niet het process killen, maar het bestand opslaan, en dan eventueel process stoppen naar de wensen.


Ok, dan kan ik een functie save en een functie quit toevoegen, maar het probleem blijft hetzelfde: Het lukt mij niet om dat excel-bestand op te slaan.

Weet iemand wat ik fout doe?
Offline larssy1 - 04/09/2011 21:31
Avatar van larssy1 MySQL beginner Ok, snel een voorbeeld..

Als je een download applicatie maakt, bijv. een updater of Origin (EA Downloader).

Als je de gehele applicatie bouwt in een enkele class buiten de Program.cs zal het programma het bestand wel downloaden, maar vervolgens niet wegschrijven op de hardeschijf, dit omdat er geen rechten zijn toegekent en dit levert dus een foutmelding.

Dit is een enkele reden waarom het handiger is om het schrijf/download gedeelte te programmeren in Program.cs, doordat Program.cs op command niveau is heeft het dus ook schrijfrechten.
Offline lolll - 05/09/2011 17:00
Avatar van lolll Lid Ik begrijp wat je bedoelt, maar dan heeft het toch geen nut om een klasse te maken als ik die schrijfcode dan telkens in het programma zelf moet zetten.
Offline larssy1 - 05/09/2011 20:19
Avatar van larssy1 MySQL beginner je classes opsplitsen en de schrijf delen in program.cs zetten is mogelijk de enigste of 1 van de weinige opties die je hebt.
Offline lolll - 05/09/2011 20:37
Avatar van lolll Lid ja maar dan heeft die klasse toch geen nut, aangezien ik dan dezelfde code (om te schrijven) in elk afzonderlijk programma waarin ik die functionaliteit nodig heb terug moet schrijven.
Ik zou dus een oplossing nodig moeten hebben waarin ik kan schrijven in mijn klasse, anders kan ik er beter mee stoppen.
Offline larssy1 - 05/09/2011 20:47
Avatar van larssy1 MySQL beginner ligt eraan hoe je het bekijkt, het is voor een deel OOP.. Je kunt zeer gemakkelijk een methode / functie met bepaalde input variabelen maken in program.cs en deze oproepen via je eige klasse
Offline lolll - 05/09/2011 20:55
Avatar van lolll Lid Tsja, als het echt niet anders kan zal ik het zo wel moeten doen. Maar moest iemand nog iets anders weten, altijd welkom!
Offline lemoinet - 05/09/2011 21:10
Avatar van lemoinet PHP gevorderde je programma zitten eerlijk gezegd zeer slecht in elkaar.
Elke keer je een waarde gaat opvragen, ga je het bestand opnieuw openen.
  1. Cell cel = new Cell(new ExcelDocument(filename), rij, kolom);

De klasse Excel en Exceldocument zou ik samenvoegen.

ik heb je code eventjes snel herschreven.
Program.cs
Excelmanager
Bedankt door: Abbas
Offline larssy1 - 05/09/2011 21:11
Avatar van larssy1 MySQL beginner heb je dit trouwens gelezen?
http://www.code...Excel.aspx
Offline lolll - 09/09/2011 20:36 (laatste wijziging 14/09/2011 13:23)
Avatar van lolll Lid Sorry voor late antwoord, maar had het druk.

@larssy1: neen dat had ik niet gezien, maar hiermee kan je enkel schrijven.

@lemoinet: zal ik een van de volgende dagen is testen, of heb jij het al getest?

Lolll

EDIT:
@lemoinet: de code geeft tal van errors waar ik niet wijs uit geraak.
Offline lemoinet - 14/09/2011 15:38
Avatar van lemoinet PHP gevorderde welke errors krijg je dan.
bij mij werkt de code perfect (VS2010)
Offline lolll - 14/09/2011 16:23 (laatste wijziging 14/09/2011 16:34)
Avatar van lolll Lid In totaal kreeg ik er 14, maar dan bleek er iets mis te zijn met de assembly, dus die heb ik de reference naar Excel (Microsoft.Office.Interop.Excel) eerst verwijderd en dan terug toegevoegd, en toen waren alle errors weg. Maar als ik rebuild krijg ik er terug 2, en daar kan ik niet echt iets uit af leiden:

Citaat:
Error 1 Member 'ExcelManager.ExcelManager.getCells()' from assembly 'c:...ExcelManagerbinReleaseExcelManager.dll' cannot be used across assembly boundaries because it contains a type which has a generic type parameter that is an embedded interop type. C:...ExcelManagerTesterProgram.cs 14 25 ExcelManagerTester

Error 2 Member 'ExcelManager.ExcelManager.getCells()' from assembly 'c:...ExcelManagerbinReleaseExcelManager.dll' cannot be used across assembly boundaries because it contains a type which has a generic type parameter that is an embedded interop type. C:...ExcelManagerTesterProgram.cs 15 26 ExcelManagerTester


Het heeft dus iets te maken met getCells(), maar ik weet niet wat.

EDIT:
Nogmaals code:
Program: Plaatscode: 141287
Class: Plaatscode: 141288

EDIT EDIT:
Ik gebruik ook VS2010 dus daar ligt het al zeker niet aan.
Offline lemoinet - 14/09/2011 18:00
Avatar van lemoinet PHP gevorderde verander "List<Range> getCells" eens naar "IList<Range> getCells"
Offline lolll - 14/09/2011 19:59
Avatar van lolll Lid Thx! het werkt. Kan je me wel eens uitleggen waarom ik nu IList moest gebruiken i.p.v een gewone List?
Toch nog eens bedankt hoor!

Lolll
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.186s