PDA

Ver la Versión Completa : Problemas para abrir archivo EXCEL


marceloalegre
18-09-2007, 16:59:16
Buenos Dias amigos

Les molesto porque estoy con el siguiente inconveniente:
Estoy procesando un archivo excel que cargo luego en otra estructura. El problema esta en que si la hoja en cuestion no se llama Hoja1 no abre el archivo. Para abrir el excel estoy usando un adoConnection y un adoDataset.
El codigo que uso es el siguiente:

// aqui comienza el tratamiento del EXCEL
ADODataSetXls.Active:=false;
DMImportExcel.mdImportData.Close;
DMImportExcel.mdImportData.Open;
DMImportExcel.mdImportData.ReadOnly:=false;
ADOConexionXls.ConnectionString:=ADOConexionXls.ConnectionString+';Data Source='+edArchivoOrigen.text;
ADODataSetXls.Active:=true;
ADODataSetXls.first;
initProgress('Extrayendo Datos desde Excel.', ADODataSetXls.RecordCount);
try
while not ADODataSetXls.eof do
begin
DMImportExcel.mdImportData.Insert;
if (ADODataSetXls.fields[0].AsString = '') or (ADODataSetXls.fields[1].AsInteger = 0) or (ADODataSetXls.fields[1].AsInteger = NULL) then
ADODataSetXls.Next;
DMImportExcel.mdImportDataDestino.value:= ADODataSetXls.fields[0].AsString; //Destino
DMImportExcel.mdImportDataPrefijo.value:= ADODataSetXls.fields[1].AsInteger; //Prefijo
DMImportExcel.mdImportDataPrecio.value:= ADODataSetXls.fields[2].AsFloat; //Precio
DMImportExcel.mdImportData.Post;
ADODataSetXls.Next;
AdvanceProgress();
end;
except
memoLog.Lines.Add('Error al Cargar Archivo Excel, verifique los datos del mismo!.');
exit;
end;


Si la hoja no se llama Hoja1 cuando hace el ADODataSetXls.Active:=true; el procedimiento se suspende sin dar error alguno... Si se llama Hoja1 anda todo correctamente!

Existe manera de que abra cualquier hoja (la primera de todas me interesa) dado que en el adoDataset tengo la propiedad CommandText en Hoja1$ ... pero me gustaria poder poner ahi, la primera hora sin importar el nombre...

GRACIAS!

marceloalegre
18-09-2007, 19:40:39
Evidentemente no habia buscado bien en los foros y la respuesta estaba AQUI!!,, Les paso para el que lo necesite el codigo para conseguir el nombre de la primera hora para hacer el procesamiento. Esto es una modificacion de un codigo ya posteado por roman, GRACIAS.


procedure HojasExcel(Archivo: String; var nombreHoja:String);
var
Excel: OleVariant;
Libro: OleVariant;
I: Integer;
begin
Excel := CreateOleObject('Excel.Application');
Libro := Excel.WorkBooks.Open(Archivo);
nombreHoja:= Libro.Worksheets.Item[1].Name; //Hoja 1 del archivo excel
Libro.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var nombreHoja:string;
begin
HojasExcel('c:\archivo.xls',nombreHoja);
showmessage(nombreHoja);
end;