WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

vorhandenes EXCEL-file richtig überspeichern

 

ka404
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 29.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2015, 10:01     Titel: vorhandenes EXCEL-file richtig überspeichern
  Antworten mit Zitat      
Hallo,

Ich habe folgendes Problem: Ich speichere Daten in eine Excel-Datei folgendermaßen ab:
Code:
  DefaultName = [num2str(k),'_Sim_N_',num2str(N)];
         [FileName,PathName]=uiputfile('*.xls','EXCEL-Datei speichern',DefaultName);
 if FileName~=0      % Nur wenn ein file ausgewählt wurde
 FilePath=fullfile(PathName,FileName);
 xlswrite (FilePath,[handles.t,handles.SEc,handles.SEb,handles.SQc,handles.SQb,
handles.strom,handles.fluor]);
     



Das Problem ist, wenn man Daten in ein schon vorhandenes EXCEL-file speichert und die neuen Daten sind weniger, als in der schon bereits vorhanden Datei, (haben also weniger Zeilen oder auch Spalten), so werden die alten Daten in den überzähligen Feldern nicht gelöscht.

Gibt es dafür eine Lösung?

Viele Grüße

Ka404
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.03.2015, 14:12     Titel: Re: vorhandenes EXCEL-file richtig überspeichern
  Antworten mit Zitat      
Hallo ka404,

Ich fasse die Frage mal zusammen:
Wie kann man eine gesamte Spalte in einem Excel-Sheet löschen?

Mit diesem Ansatz kann man leicht Lösungen finden, wenn man seine Lieblings-Internet-Suchmaschine fragt: "Matlab delete column in Excel sheet".
So ein Forum ist prima, aber bereits vorhandene Lösungen zu nutzen ist immer effizienter als eine neue zu erstellen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
ka404
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 29.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.03.2015, 19:16     Titel:
  Antworten mit Zitat      
Hallo,

Hab mal im Matlab-Forum gesucht und nutze nun diesen Code:

Code:
%Öffne Excel-File "xfile" via ActiveX
xobject = actxserver('Excel.Application');
xworkbook = xobject.workbooks.Open(FilePath);
worksheets = xobject.sheets;

%Anzahl der Vorhandenen Blätter
numSheets = worksheets.count;

h1 = 1;
h2 = 1;
while h2 <= numSheets
   sheetName = worksheets.Item(h1).Name(1:end-1);
   if ~isempty(strmatch(sheetName,'Tabelle'))
      worksheets.Item(h1).Delete;
   else
      % Move to the next sheet
      h1 = h1+ 1;
   end
   h2 = h2 + 1; % prevent endless loop...
end
 
%Schließe Excel-File
xworkbook.Save;
xworkbook.Close(false);
xobject.Quit;
delete(xobject);
end    


Bin ich in der Zeile mit : worksheets.Item(h1).Delete;
Im debug-Modus angekommen so kommt diese fehlermeldung:
Zitat:
Error using
Interface.Microsoft_Excel_15.0_Object_Library._Worksheet/Delete
Invoke Error, Dispatch Exception:
Source: Microsoft Excel
Description: Die Arbeitsmappe muss mindestens ein sichtbares
Arbeitsblatt enthalten.

Um das ausgewählte Blatt (oder Blätter) auszublenden, zu löschen
oder zu verschieben, müssen Sie zuerst ein neues Blatt einfügen
oder ein ausgeblendetes Blatt wieder einblenden.
Help File: xlmain11.chm
Help Context ID: 0

Error in Simulation_V22A>close_Callback (line 558)
worksheets.Item(h1).Delete;

Error in gui_mainfcn (line 96)
feval(varargin{:});

Error in Simulation_V22A (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)Simulation_V22A('close_Callback',hObject,eventdata,guidata(hObject))


Error using waitfor
Error while evaluating uicontrol Callback


warum kommt diese Fehlermeldung?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.03.2015, 21:29     Titel:
  Antworten mit Zitat      
Hallo,

die Fehlermeldung ist doch an sich recht klar?
Anscheinend würde der Code alle Tabellenblätter löschen. Um das letzte der anderen Tabellenblätter zu löschen, musst du aber wohl erst ein neues anlegen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ka404
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 29.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.03.2015, 09:46     Titel:
  Antworten mit Zitat      
Ich komm einfach nicht weiter....
Brauch dringend Hilfe, ich glaub mein Code vorher war falsch dieser löscht ja nur die leeren Blätter, aber ich möchte ja den inhalt des vorhandenen excel sheet löschen und wieder beschreiben

nutze jetzt das hier:
Code:
if exist(FileName, 'file') == 2

%Öffne Excel-File "xfile" via ActiveX
xobject = actxserver('Excel.Application');
xworkbook = xobject.workbooks.Open(FilePath);
xworksheets = xobject.sheets;

h2=1;
try
 
    %Alle Zellen wählen und löschen
    range = get(xworksheets.Item(h2),'Range','A1','IV65536');
    set(range, 'Value',{''});
catch
    %Warnung, falls "xsheet" nicht gefunden wird
    warndlg(['Achtung: Blatt "' xsheet '" nicht gefunden!'],'Fehler');

end
 
%Schließe Excel-File
xworkbook.Save;
xworkbook.Close(false);
xobject.Quit;
delete(xobject);
end      
         if FileName~=0      % Nur wenn ein file ausgewählt wurde
            FilePath=fullfile(PathName,FileName);
            if get(handles.checkbox2,'Value')==true % wenn "mit glatter Kurve" ausgewählt ist
            xlswrite (FilePath,[handles.t,handles.SEc,handles.SEb,handles.SQc,handles.SQb,handles.strom,handles.fluor]);
            else
            xlswrite(FilePath,[handles.t,handles.SEc,handles.SEb,handles.SQc,handles.SQb]);
            end
         end
       end
 


und bekomme die Fehlermeldung:
Zitat:
Error using xlswrite (line 220)
The file
C:\Users\Katharina\Documents\MATLAB\1_Sim_N_100.xls
is not writable. It may be locked by another
process.

Error in Simulation_V22A>close_Callback (line 572)
xlswrite(FilePath,[handles.t,handles.SEc,handles.SEb,handles.SQc,handles.SQb]);

Error in gui_mainfcn (line 96)
feval(varargin{:});

Error in Simulation_V22A (line 42)
gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)Simulation_V22A('close_Callback',hObject,eventdata,guidata(hObject))


Error using waitfor
Error while evaluating uicontrol Callback


warum ist es nicht überschreibbar?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.03.2015, 10:17     Titel:
  Antworten mit Zitat      
Hallo,

ist die Datei vielleicht geöffnet?
Das wäre ein Grund, warum sie nicht (von außen) überschreibbar ist.

Ansonsten mal Excel komplett schließen und auch über den Task Manager evtl. noch vorhandene Excel-Prozesse abschießen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
ka404
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 95
Anmeldedatum: 29.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2015, 08:04     Titel:
  Antworten mit Zitat      
Hallo,

Die Excel-Datein waren ewig nicht geöffnet, auch im Task Manager nicht zu sehen, aber nach einem Neustart des Rechners, hat alles funktioniert.

Danke nochmal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.