Matlab - Exportación Excel varias veces

 
Vista:
sin imagen de perfil

Exportación Excel varias veces

Publicado por Juan José (60 intervenciones) el 13/05/2014 11:32:29
Hola amigos,

Les escribo un código y lo explico:

1
2
3
4
5
6
7
8
9
10
% EXPORTACIÓN DATOS A EXCEL (HOJA Simulación)
Titulos={'L(mm)' 'D(mm)' 'R(mm)' 'hR' 'n(rpm)' 'alpha(º)' 'Theta(º)' 'a' 'MRTfinal(min)' 'Vr' 'Vr2' 'Pe'}; % Variable Titulos
xlswrite('MeanResidenceTime.xlsx',Titulos','Simulación','A2:A13'); % Escribir Titulos en Excel
Datos={L D R hR n alpha Theta a MRTfinal Vr Vr2 Pe}; % Variable Datos
Num=xlsread('MeanResidenceTime.xlsx','Simulación','B2:B13');
if isempty(Num)==1
    xlswrite('MeanResidenceTime.xlsx',Datos','Simulación','B2:B13')
elseif isempty(Num)==0
    xlswrite('MeanResidenceTime.xlsx',Datos','Simulación','C2:C13')
end

El resto del código es muy largo, copio sólo la parte de exportación.

1. Creo la variable cell Titulos (caracteres)
2. Escribo esas variables en Excel (en columna)
3. Creo la variable datos (corresponden a los valores numéricos de titulos)
4. Leo el excel y meto el resultado en Num
5. Si num está vacía, escribo los valores numéricos en la columna B
6. Si Num está llena, escribo los valores en C

La idea es ejecutar el código e ir exportando datos a Excel en distintas columnas a la derecha para así ver resultados cuando cambio variables que introduce el usuario.

Lo suyo sería realizarlo con un for:
¿Cómo puedo crear una variable que represente la letra de las columnas de excel?

Gracias y un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Exportación Excel varias veces

Publicado por Juan José (60 intervenciones) el 13/05/2014 13:27:43
Mirad,

Este es el error:

??? Error using ==> xlsread at 277
Data range is invalid.

Error in ==> PruebaExportar at 141
Num=xlsread('EjemplosconMATLAB.xlsx','Hoja1','columnas(i)2:columnas(i)13');

Parece que no puedo camuflar dentro del comando xlsread el rango de una hoja de Excel.

Este fue el intento de código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
% PRUEBA PRUEBA PRUEBA PRUEBA %
% PRUEBA PRUEBA PRUEBA PRUEBA %
% PRUEBA PRUEBA PRUEBA PRUEBA %
% PRUEBA PRUEBA PRUEBA PRUEBA %
% PRUEBA PRUEBA PRUEBA PRUEBA %
 
 
 
% EXPORTACIÓN DATOS A EXCEL (HOJA Simulación)
Titulos={'L(mm)' 'D(mm)' 'R(mm)' 'hR' 'n(rpm)' 'alpha(º)' 'Theta(º)' 'a' 'MRTfinal(min)' 'Vr' 'Vr2' 'Pe'}; % Variable Titulos
xlswrite('EjemplosconMATLAB.xlsx',Titulos','Hoja1','A2:A13'); % Escribir Titulos en Excel
Datos={L D R hR n alpha Theta a MRTfinal Vr Vr2 Pe}; % Variable Datos

columnas={'B' 'C' 'D'};
n=length(columnas);
for i=1:n
    Num=xlsread('EjemplosconMATLAB.xlsx','Hoja1','columnas(i)2:columnas(i)13');
if isempty(Num)==1
    xlswrite('EjemplosconMATLAB.xlsx',Datos','Hoja1','columnas(i)2:columnas(i)13')
elseif isempty(Num)==0
    xlswrite('EjemplosconMATLAB.xlsx',Datos','Hoja1','columnas(i+1)2:columnas(i+1)13')
end
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge De Los Santos
Val: 30
Ha disminuido su posición en 12 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Exportación Excel varias veces

Publicado por Jorge De Los Santos (213 intervenciones) el 13/05/2014 17:57:42
Hola Juan José.

Lo que planteas suena interesante.Verás, MATLAB proporciona la función "char" para crear los caracteres o letras que habitualmente utilizamos, en este caso nos interesan letras mayúsculas para nombrar las columnas de Excel, por ejemplo:

1
2
3
4
5
>> char(65:90)
 
ans =
 
ABCDEFGHIJKLMNOPQRSTUVWXYZ


Como podéis observar se obtienen las letras mayúsculas que usaremos para nombrar las columnas de Excel de manera progresiva.

La otra función que os servirá es "sprintf" con la cual concatenaremos los nombres del rango de las columnas. Enseguida te adjunto una manera de cómo hacerlo.

1
2
3
4
5
6
7
8
9
10
11
12
Titulos={'L(mm)' 'D(mm)' 'R(mm)' 'hR' 'n(rpm)' 'alpha(º)' 'Theta(º)' 'a' 'MRTfinal(min)' 'Vr' 'Vr2' 'Pe'}; % Variable Titulos
xlswrite('MeanResidenceTime.xlsx',Titulos','Simulación','A2:A13'); % Escribir Titulos en Excel
Letras=char(66:90); % Letras de B a Z
for i=1:length(Letras)-1
    Datos=rand(1,12); % Variable Datos
    Num=xlsread('MeanResidenceTime.xlsx','Simulación',sprintf('%s2:%s13',Letras(i),Letras(i)));
    if isempty(Num)
        xlswrite('MeanResidenceTime.xlsx',Datos','Simulación',sprintf('%s2:%s13',Letras(i),Letras(i)));
    else
        xlswrite('MeanResidenceTime.xlsx',Datos','Simulación',sprintf('%s2:%s13',Letras(i+1),Letras(i+1)))
    end
end


En lo anterior he utilizado un vector aleatorio para cada "simulación", pero evidentemente puedes colocar en ese punto una entrada de valores dada por el usuario.


Saludos, espero te sea útil.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Exportación Excel varias veces

Publicado por Juan José (60 intervenciones) el 14/05/2014 08:24:54
Hola Jorge,

Muchas gracias por la respuesta. Parece interesante esa forma de hacerlo y es totalmente válida, además de similar a la manera que yo intente.

Muy útil la función char para caracteres.

De cualquier manera, voy a escribir el código de cómo lo he solucionado por si puede servirle a alguien:

% EXPORTACIÓN DATOS A EXCEL (HOJA Simulación)
Titulos={'L(mm)' 'D(mm)' 'R(mm)' 'hR' 'n(rpm)' 'alpha(º)' 'Theta(º)' 'a' 'MRTfinal(min)' 'Vr' 'Vr2' 'Pe'}; % Variable Titulos
xlswrite('MeanResidenceTime.xlsx',Titulos','Simulación','A2:A13'); % Escribir Titulos en Excel
Datos={L D R hR n alpha Theta a MRTfinal Vr Vr2 Pe}; % Variable Datos
col=['B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K'];% Columnas Excel
tama=length(col);
k=1; %Contador para posición vector col
while k<=tama,
Rng=strcat([col(k),int2str(2),':',col(k),int2str(13)]); % Rango para Excel
Num=xlsread('MeanResidenceTime.xlsx','Simulación',Rng);
if isempty(Num)==0
k=k+1;
else
xlswrite('MeanResidenceTime.xlsx',Datos','Simulación',Rng)
k=length(col)+1;
end
end

Gracias de cualquier forma.

Una pregunta. ¿ALGUIEN SABE COMO AÑADIR UNA LÍNEA DE COMANDO PARA CERRAR EL ARCHIVO EXCEL ANTES DE ESCRIBIR?
Resulta que el código da error si el archivo Excel está abierto.

Saludos!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar