es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Archivo TdxSpreadSheet xlsx que contiene otras hojas, ¿cómo separarlas en archivos xlsx individuales?

Tengo que guardar todas las hojas diferentes en un archivo xlsx en formato csv usando FdxSpreadSheet.
Quiero pasar el índice actual de las hojas a la función loadFromFile y guardarlas añadiendo el índice al final del nombre.
No funciona y siempre guarda la primera hoja con un nombre de índice diferente N veces.
¿Cómo puedo cargar hojas diferentes y guardarlas en archivos diferentes?

FdxSpreadSheet := TdxSpreadSheet.Create(nil);
try
aFileText := ChangeFileExt(CurrentFile,'.csv');
FdxSpreadSheet.LoadFromFile(CurrentFile);
for I:=0 to FdxSpreadSheet.SheetCount -1 do begin
aFileText := ChangeFileExt(CurrentFile,IntToStr(I)+'.csv');
FdxSpreadSheet.LoadFromFile(FdxSpreadSheet.Sheets[I]);
FdxSpreadSheet.SaveToFile(aFileText);
Result := aFileText;
LogModule.ScriviLog('Archivo convertido de XlsX a CSV ',Format(': [%s]',[aFileText]),tpLiv4);
end;
finally
FreeAndNil(FdxSpreadSheet);
end;

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que el problema con el código proporcionado es que el método LoadFromFile se está llamando dos veces con diferentes parámetros. Primero con el nombre del archivo y luego con el índice de la hoja. Esto podría estar causando que la hoja de cálculo siempre cargue la primera hoja en lugar de la especificada por el índice.

    Para cargar y guardar diferentes hojas en archivos separados, se puede seguir el siguiente enfoque:

    FdxSpreadSheet := TdxSpreadSheet.Create(nil);
    try
      aFileText := ChangeFileExt(CurrentFile, '.csv');
      FdxSpreadSheet.LoadFromFile(CurrentFile);
      for I := 0 to FdxSpreadSheet.SheetCount - 1 do begin
        aSheet := FdxSpreadSheet.Sheets[I];
        aFileName := ChangeFileExt(aFileText, '_' + IntToStr(I) + '.csv');
        aSheet.ExportToCSV(aFileName);
        LogModule.ScriviLog('Archivo convertido de XlsX a CSV', Format(':[%s]', [aFileName]), tpLiv4);
      end;
    finally
      FreeAndNil(FdxSpreadSheet);
    end;
    

    En este fragmento de código, se utiliza el método ExportToCSV del objeto de la hoja para exportar directamente la hoja a un archivo CSV. El nombre del archivo se construye utilizando el nombre de archivo actual y el índice de la hoja. Esto debería guardar cada hoja en un archivo diferente con el índice correspondiente.

Comments are closed.