* Это файл "Process all xls files in folder part 2.SPS" * Перед запуском этого файла должен быть запущен скрипт "Process all xls files in folder part 1.SBS". * Автор: rlevesque@videotron.ca. */////////////////////////////. SET MPRINT=no. * Исправьте следующий путь на путь к той папке, где должны быть сохранены файлы sav после обработки. DEFINE !outdir()'c:\\temp\\' !ENDDEFINE. * Следующий макрос предназначен для выполнения некоторых нужных пользователю операций с файлом xls перед тем, как он будет сохранён в файл sav. Макрос вызывается в конце этого файла. *//////////////////. DEFINE !psf2 (fnumb=!TOKENS(1) /fname=!CMDEND ) !LET !infile =!QUOTE(!CONCAT(!UNQUOTE(!EVAL(!indir)),!fname)) /* Следующая команда предполагает исполнение синтаксиса на версии SPSS 10.0 и выше */. /* Исправьте название листа Excel на то, которое есть у вас на самом деле */. GET DATA /TYPE=XLS /FILE=!infile /CELLRANGE=full /READNAMES=on . * Если вам нужно импортировать данные не с первого, а с определённого листа файла xls, можно явно указать * это в подкоманде /SHEET=name 'имя_листа'. При этом листы с указанным именем должны находиться во всех * обрабатываемых файлах - А.Б. /*************************************************************/. /* Вставьте сюда любой нужный вам набор команд обработки */. /*************************************************************/. /* Следующая строка подразумевает, что имя файла sav будет таким же, */ /* как и имя соответствующего файла xls. Если вы предпочитаете имена */ /* с последовательной нумерацией, измените параметр !fname ниже на !fnumb */ !LET !outfile=!QUOTE(!CONCAT(!UNQUOTE(!EVAL(!outdir)),!fname,'.sav')) SAVE OUTFILE=!outfile. !ENDDEFINE. */////////////////////////////. * Читаем все имена файлов xls. *================================================================================================. * Этот блок исправлен. Элегантный вариант получения списка файлов в скрипте через командную * строку не всегда хорошо работает с длинными именами файлов и именами с нелатинскими символами. * Предложен более надёжный в данном случае вариант формирования списка. * Соответственно исправлен блок команд в файле синтаксиса - А.Б. * FILE TYPE MIXED FILE=!indir + "list.txt" RECORD=REC_ID 10-12 (A). * RECORD TYPE 'XLS'. * DATA LIST FIXED / fname 1-8(A). * END FILE TYPE. DATA LIST FILE=!indir+"list.txt" /fname 1-256 (A). *================================================================================================. LIST. * Записываем синтаксис, который вызовет определённый выше макрос с каждым из файлов xls. COMPUTE fnumb=$CASENUM. FORMATS fnumb (F8.0). WRITE OUTFILE=!indir + "macro calls.sps" /"!psf2 fnumb=" fnumb " fname=" fname. EXECUTE. * Следующая команда заставляет отображать в окне результатов команды синтаксиса, которые сгенерировал макрос. SET MPRINT=yes. * Теперь запускаем только что созданный синтаксис. INCLUDE FILE=!indir + "macro calls.sps".