Benutzer mit den meisten Antworten
Dateiattribut "schreibgeschützt" aus VB löschen

Frage
-
Hallo - Wie lösche ich das Datei-Attribut "schreibgeschützt" einer EXCEL-Datei aus Visual Basic 2010?
Nachdem Pfad und Dateiname ermittelt wurden, ist die EXCEL Datei schreibgeschützt geöffnet (siehe unten). Alle Zellen können gelesen und geändert werden.
EXCEL = CreateObject("Excel.Application") 'Leeres Blatt öffnen
EXCEL.Visible = False 'Datei verbergen
EXCEL.Workbooks.Open(openFileDialog1.FileName) 'Datei öffnen
EXCEL.Visible = True 'Datei darstellenDa die Datei nicht unter einem fremden Namen abgespeichert werden soll, muss der Schreibschutz entfernt werden. Wie ist das zu realisieren, bitte?
Viele Grüße, Heiko
Antworten
-
Hi,
Es werden Daten von einer Anlage gemessen, die dann in eine EXCEL Datei geschrieben werden sollen. Die EXCEL Datei wertet die Daten aus. Mehr ist das nicht.
da ist deine Variante IMHO wirklich nicht sinnvoll. Wenn es sich rein um Daten handelt, die man auch in Datenbanken ablegen könnte, kannst Du per OleDb arbeiten.
Siehe dazu bspw.:
http://stackoverflow.com/questions/4718171/using-oledb-to-insert-data-into-excel-2007-in-c
In VB6 vor gut 13 Jahren erstellt, funktioniert das alles reibungslos. Danach ist nichts mehr gemacht worden, kein update oder sonstwas. Auf XP hat das gut funktioniert. Mit der umstellung auf Windows 7 soll jetzt alles noch besser werden. Gruß Heiko
Das hat aber alles nichts mit einem evtl. vorhandenen Schreibschutz zu tun. Wenn Du beim Öffnen der Datei Readonly = False nicht angibst, kommt es auch zu dem genannten Effekt. Aber ich hab irgendwie das Gefühl, dass Du das gar nicht ausprobiert hast.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert jungeausbremen Mittwoch, 24. August 2011 08:54
Alle Antworten
-
Hallo Heiko,
schau mal hier:
http://dotnet-snippets.de/dns/schreibschutz-einer-datei-setzen--entfernen-SID452.aspx
(Link zum Übersetzen in VB.NET ist auch vorhanden, ansonsten hilft da auch http://converter.telerik.com/)---
Nach nochmaligem Lesen denke ich, dass Du das Schreibschutzattribut in Excel selbst meinst!? Falls ja:
http://www.mrexcel.com/forum/showthread.php?t=81653
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community
-
Bei der EXCEL Datei soll der Schreibschutz entfernt werden (und womöglich sind auch die Schutzrechte betroffen??), sonst lässt sich die Datei nicht überschreiben.
Die Codes oben haben nur einen schwarzen Bildschirm erzeugt. Danke aber trotzdem. Ciao Heiko
-
Hallo Heiko,
Bei der EXCEL Datei soll der Schreibschutz entfernt werden (und womöglich sind auch die Schutzrechte betroffen??), sonst lässt sich die Datei nicht überschreiben.
Die Codes oben haben nur einen schwarzen Bildschirm erzeugt. Danke aber trotzdem. Ciao Heiko
Einen schwarzen Bildschirm? Da hast Du dann aber eher irgendwas anderes verkehrt gemacht. Wenn überhaupt, käme da eher eine Fehlermeldung aber einen schwarzen Bildschirm produziert sowas nicht. Es sei denn, die Methode würde eine Aktion durchführen, die die UAC auf den Plan ruft und Du müsstest die Aktion dann bestätigen/als Admin ausführen/...
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Es waren so viele EXCEL dateien offen, die haben wohl dazu geführt. Bei den Test's habe ich die nie geschlossen. Es ist ja nichts passiert. An den code lag es nicht, geholfen hat der auch nicht. In VB6 hat das alles ganz gut ohne Probleme gearbeitet.
Die Programmierung mit EXCEL.... etc wie oben aufgeführt ist glaube ich, auch nicht die richtige Methode. Ciao, Heiko
-
Hi,
Die Programmierung mit EXCEL.... etc wie oben aufgeführt ist glaube ich, auch nicht die richtige Methode. Ciao, Heiko
In VB 6 hat ein Schreibschutzattribut auf eine Datei dieselben Auswirkungen wie in VB.NET, da das mit der Technologie, die man zum Programmieren verwendet, wenig bis gar nichts zu tun.
Wenn Du Exceldateien bearbeiten willst, kommt es u.a. darauf an, ob Du das in einer normalen WinForms/WPF Anwendung oder einem Dienst, ASP.NET, ... machen willst. Bei letzteren ist die von dir gewählte Variante die schlechteste von allen, da Office Automatisierung in Diensten weder empfohlen wird noch ohne Probleme machbar ist.
Wenn Du uns ein paar Details zu dem, was Du da wo wie machen willst, verrätst, kann man evtl. auch helfen.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi, Ich verwende nur die normale WinForms/WPF Anwendung. Es werden Daten von einer Anlage gemessen, die dann in eine EXCEL Datei geschrieben werden sollen. Die EXCEL Datei wertet die Daten aus. Mehr ist das nicht. In VB6 vor gut 13 Jahren erstellt, funktioniert das alles reibungslos. Danach ist nichts mehr gemacht worden, kein update oder sonstwas. Auf XP hat das gut funktioniert. Mit der umstellung auf Windows 7 soll jetzt alles noch besser werden. Gruß Heiko
-
Hi,
Es werden Daten von einer Anlage gemessen, die dann in eine EXCEL Datei geschrieben werden sollen. Die EXCEL Datei wertet die Daten aus. Mehr ist das nicht.
da ist deine Variante IMHO wirklich nicht sinnvoll. Wenn es sich rein um Daten handelt, die man auch in Datenbanken ablegen könnte, kannst Du per OleDb arbeiten.
Siehe dazu bspw.:
http://stackoverflow.com/questions/4718171/using-oledb-to-insert-data-into-excel-2007-in-c
In VB6 vor gut 13 Jahren erstellt, funktioniert das alles reibungslos. Danach ist nichts mehr gemacht worden, kein update oder sonstwas. Auf XP hat das gut funktioniert. Mit der umstellung auf Windows 7 soll jetzt alles noch besser werden. Gruß Heiko
Das hat aber alles nichts mit einem evtl. vorhandenen Schreibschutz zu tun. Wenn Du beim Öffnen der Datei Readonly = False nicht angibst, kommt es auch zu dem genannten Effekt. Aber ich hab irgendwie das Gefühl, dass Du das gar nicht ausprobiert hast.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community- Als Antwort markiert jungeausbremen Mittwoch, 24. August 2011 08:54
-
Ich möchte nicht in OleDb arbeiten, da die ganze Auswertung in Excel erfolgt. Das ist alles fertig.
Den befehl Readonly = false kenn ich nicht. Wo steht denn sowas, und wie wende ich den an? Könnte ich dazu einen Link bekommen? Das wäre super.
Ich habe in so vielen Fragen und Antworten gesucht, so etwas aber nie gefunden. Die Systematik fehlt mir völlig sich hier durchzufragen und an der richtigen Problemstellung zu arbeiten. Da wird so vieles besprochen, trifft aber nie mein Problem, obwohl ich das als trivial einstufe. Gruß Heiko
-
Hi,
Ich möchte nicht in OleDb arbeiten, da die ganze Auswertung in Excel erfolgt. Das ist alles fertig.
Den befehl Readonly = false kenn ich nicht. Wo steht denn sowas, und wie wende ich den an? Könnte ich dazu einen Link bekommen? Das wäre super.
Ich habe in so vielen Fragen und Antworten gesucht, so etwas aber nie gefunden. Die Systematik fehlt mir völlig sich hier durchzufragen und an der richtigen Problemstellung zu arbeiten. Da wird so vieles besprochen, trifft aber nie mein Problem, obwohl ich das als trivial einstufe. Gruß Heiko
Ehrlich gesagt glaube ich mittlerweile eher, dass das an dir liegt. Wenn Du die Antworten, die Du erhältst, auch mal lesen und dich insbesondere auch mit den verlinkten Artikeln/... beschäftigen würdest, wären viele Fragen gar nicht erst notwendig. Natürlich kann es auch mal passieren, dass ein Antwortender am Thema vorbeiredet (mich eingeschlossen) aber deine Rückfragen zeigen schon, dass Du nicht wirklich liest, was man dir schreibt.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Ich schau nochmal nach, wie das mit dem OleDB geht. Der Link dahin hat mir aber zunächst etwas gesagt, was ich überhaupt nicht einordnen konnte und erst einmal mit dem Attribut löschen nichts zu tun hatte, wie ich meine. Das alles in mein Programm einzubinden ging zunächst überhaupt nicht! Ich frage ja, weil ich nicht so versiert damit bin, und kann eine Antwort darauf erwaren.
Ich möchte auch nicht noch mehr Baustellen auf machen. Das ganze müsste doch in ein paar Zeilen abgehandelt sein.Da das wohl doch nicht so einfach ist, denn sonst wäre das Problem ja längst gelöst, muss ich wohl mich noch weiter damit beschäftigen. Die Lösung mit dem EXCEL... wie ober eingangs geschrieben erscheint mir jedenfalls auch nicht gut. Ich war erstaunt, dass so etwas überhaupt funktioniert hat, da der Editor überhaupt nichts mehr unterstützt hatte. Gruß Heiko
-
Hi,
Ich schau nochmal nach, wie das mit dem OleDB geht.
tu das. Wie schon gesagt. Wenn Du Daten in einer CSV Datei, Datenbank, ... bzw. einer ähnlichen Form hast und diese Daten lediglich in eine Excel (oder auch CSV, Access, ...) Datei importieren willst, ist OleDb die bessere Wahl.
Wenn Du gezielt einzelne Zellen ansprechen und dort außer Daten auch noch etwas wie Funktionen, ... hinterlegen musst, geht das nicht mit OleDb. Da wäre dann eine Komponente oder das OpenXML SDK besser geeignet.
Der Link dahin hat mir aber zunächst etwas gesagt, was ich überhaupt nicht einordnen konnte und erst einmal mit dem Attribut löschen nichts zu tun hatte, wie ich meine.
Zwar nicht direkt aber da Du ja leider bisher nicht geschrieben hast, was genau Du eigentlich meinst (also Schreibschutz auf Dateisystemebene oder Schreibschutz in Excel selbst) versucht man halt auch mal Alternativen aufzuzeigen.Das alles in mein Programm einzubinden ging zunächst überhaupt nicht! Ich frage ja, weil ich nicht so versiert damit bin, und kann eine Antwort darauf erwaren.
Deine Erwartungshaltung geht nicht konform mit den "erwarteten" Antworten auf Rückfragen. Zudem kann man in einem Forum immer nur eins erwarten: Nichts. Wir helfen hier alle gerne (und vor allem in unserer Freizeit, dazu noch kostenlos, ...). Aber wenn jemand hier etwas "erwartet", macht es gleich viel weniger Spaß und man überlegt sich zweimal, ob man sich den Stress antun will.Ich möchte auch nicht noch mehr Baustellen auf machen. Das ganze müsste doch in ein paar Zeilen abgehandelt sein.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hi Stefan, Ich schicke jetzt mal die Zeilen, die micht zunächst zufrieden stellen und zeigen, was ich will. Das Problem mit dem Schreibschutz ist hier noch nicht erledigt. Was auch im Moment noch gar nicht erforderlich ist, da die Daten nur gelesen werden. An dem Open-Befehl kann ich auch keine Attribute dranhängen (???).
lbl1 = Dateipfad, txt1 = Daten gelesen oder zur Übernahme
Programmsequenz:
Dim exclApp As Object 'as Application
Dim Datei As Object 'as WorkBook
Dim Blatt As Object 'as WorkSheet
exclApp = CreateObject("Excel.Application")
With exclApp
'.Visible = True 'Datei sichtbar
.Visible = False 'Datei verbergen
Datei = .Workbooks.Open(F13.lbl1.Text) 'Pfad mit Datei - öffnen ÖFFNET Schreibgeschützt
Blatt = Datei.Worksheets("Messverfahren") 'Excel Blatt "Messverfahren"
DatenText = Blatt.Range("B2").Value 'Zell B2 auslesen
'Tabelle selektieren:
If DatenText = DateiIdent Then 'Datei Identifikation abfragen
Blatt = Datei.Worksheets("Grunddaten") 'Excel Blatt "Grunddaten"
'Blatt.Range("D2").Value = txt1.Text 'schreiben in Zelle
txt1.Text = Blatt.Range("D2").Value 'lesen aus Zelle
Else
MsgBox("Es ist keine DMSdatei gewählt - Bitte neu auswählen")
End If
Datei.close(True)
.quit()
End WithSo kann ich jedenfalls alles aus EXCEL lesen und auch schreiben.
Ciao, Heiko