2008-10-06 23 views

Respuesta

8

Aquí es una rutina que se va a convertir todos los archivos de un solo directorio que tiene una extensión .xls.

Se necesita un enfoque directo. Se elimina cualquier código de VBA en un libro de trabajo, el libro de trabajo no se guarda con una extensión .xlsm. Las advertencias de incompatibilidad no se desvían, sino que los cambios se aceptan automáticamente.

Sub Convert_xls_Files() 

Dim strFile As String 
Dim strPath As String 

    With Application 
     .EnableEvents = False 
     .DisplayAlerts = False 
     .ScreenUpdating = False 
    End With 
'Turn off events, alerts & screen updating 

     strPath = "C:\temp\excel\" 
     strFile = Dir(strPath & "*.xls") 
'Change the path as required 

    Do While strFile <> "" 
     Workbooks.Open (strPath & strFile) 
     strFile = Mid(strFile, 1, Len(strFile) - 4) & ".xlsx" 
     ActiveWorkbook.SaveAs Filename:=strPath & strFile, FileFormat:=xlOpenXMLWorkbook 
     ActiveWorkbook.Close True 
     strFile = Dir 
    Loop 
'Opens the Workbook, set the file name, save in new format and close workbook 

    With Application 
     .EnableEvents = True 
     .DisplayAlerts = True 
     .ScreenUpdating = True 
    End With 
'Turn on events, alerts & screen updating 

End Sub 
+1

Gracias Robert, funcionó muy bien. Lo único que cambié fue FileFormat: = XlFileFormat.xlXMLSpreadsheet (estoy usando Excel 2003) – kristof

+0

¿Se puede escribir el código anterior en php? – chupinette

3

Se puede adaptar el código que he publicado aquí:

http://www.atalasoft.com/cs/blogs/loufranco/archive/2008/04/01/loading-office-documents-in-net.aspx

Muestra cómo guardar como PDF (Word se muestra en el blog, pero si se descarga la solución, que tiene código para Excel y PPT).

Necesita encontrar la función para guardar como el nuevo formato en lugar de exportar (probablemente la forma más fácil es grabar una macro de usted mismo haciéndolo en Excel y luego mirar el código).

+0

Gracias Lou tanto para la respuesta y para corregir el nombre de extensión de archivo en la pregunta. Puedo mirar su sugerencia cuando necesito una solución más completa. En cuanto al momento estoy bien con VBA – kristof

0

La manera más simple es registrar macro para un archivo y luego editar manualmente las macros para realizar tales acciones para los archivos en la carpeta usando loop. En macro puede usar las funciones estándar de VB para obtener todos los archivos en el directorio y filtrarlos. Puede mirar http://www.xtremevbtalk.com/archive/index.php/t-247211.html para obtener información adicional.

3

abrirlos todo para arriba y presione ALT + F11 para llegar al editor de macros y entrar en algo así como:

Sub SaveAllAsXml() 
    Dim wbk As Workbook 
    For Each wbk In Application.Workbooks 
     wbk.SaveAs FileFormat:=XlFileFormat.xlXMLSpreadsheet 
    Next 
End Sub 

Y a continuación, presione F5 para ejecutarlo. Puede necesitar algunos ajustes ya que no lo he probado.

+0

Gracias, fue útil – kristof

1

Suena como un trabajo para mi idioma favorito más subestimado de todos los tiempos: VBScript !!

poner esto en un archivo de texto, y crea la extensión ".vbs":

set xlapp = CreateObject("Excel.Application") 
set fso = CreateObject("scripting.filesystemobject") 
set myfolder = fso.GetFolder("YOURFOLDERPATHHERE") 
set myfiles = myfolder.Files 
for each f in myfiles 
    set mybook = xlapp.Workbooks.Open(f.Path) 
    mybook.SaveAs f.Name & ".xml", 47 
    mybook.Close 
next 

no he probado esto, pero debería funcionar

0
Const xlXLSX = 51 

REM 51 = xlOpenXMLWorkbook (without macro's in 2007-2013, xlsx) 
REM 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2013, xlsm) 
REM 50 = xlExcel12 (Excel Binary Workbook in 2007-2013 with or without macro's, xlsb) 
REM 56 = xlExcel8 (97-2003 format in Excel 2007-2013, xls) 

dim args 
dim file 
dim sFile 
set args=wscript.arguments 

dim wshell 
Set wshell = CreateObject("WScript.Shell") 

Set objExcel = CreateObject("Excel.Application") 

Set objWorkbook = objExcel.Workbooks.Open(wshell.CurrentDirectory&"\"&args(0)) 

objExcel.DisplayAlerts = FALSE 

objExcel.Visible = FALSE 

objWorkbook.SaveAs wshell.CurrentDirectory&"\"&args(1), xlXLSX 

objExcel.Quit 

Wscript.Quit 
Cuestiones relacionadas