导入xlwt生成的excel文件到SAS

我使用xlwt将一些csv文件转换为excel文件。 之后,我需要将这些excel文件导入SAS(统计软件)。

首先尝试SAS抛出一个错误,说文件格式是无效的。

但是,当我用MS Excel打开任何生成的文件,并closures没有做任何更改,并没有保存文件导入SAS成功。

我发现MS Excel更改文件头添加那里当前用户名和更新文件修改date。

我想知道是否有任何可能性修改Excel文件二进制头保存之前。

更新:我正在使用xlwt版本0.7.4,Python 2.7.3,SAS 9.3,Excel 2010,Windows 7 32位。

这是我的代码的一部分,我将CSV转换为Excel:

wb = xlwt.Workbook(encoding='latin-1') ws = wb.add_sheet('Sheet1') sourceCSV = csv.reader(open(files, 'rb'), delimiter=";") for rowi, row in enumerate(sourceCSV): for coli, value in enumerate(row): ws.write(rowi, coli, value) wb.save(xls_file) 

以下是用于SAS导入function的选项:

 ... DBMS=EXCEL REPLACE; RANGE="Sheet1$"; GETNAMES=YES; MIXED=NO; SCANTEXT=YES; USEDATE=YES; SCANTIME=YES; ... 

这是SAS产生的错误:

 ERROR: Connect: External table is not in expected format. ERROR: Error in the LIBNAME statement. 

如果在Excel中打开工作簿并保存它,SAS就可以正确导入它,这就表明(对我来说)在xlxt (一个我一无所知的过程)中存在一些缺陷。 将Excel文件导入SAS是一个复杂的主题,因为有许多不同types的Excel工作簿。

直接读取CSV文件并跳过转换为Excel会容易得多。 当您使用PROC IMPORT读取CSV文件时,SAS将检查文件的前几行以确定列types。 默认情况下,SAS只会查看文件中的前20行,但可以使用GUESSINGROWS语句更改该

 proc import datafile="C:\temp\test.csv" out=mydataset dbms=csv replace; getnames=yes; /* Uses first row in CSV for column names */ guessingrows=32767; run; 

以上是SAS版本9.2中GUESSINGROWS的最大值; 如果使用9.3,最大值已增加到2,147,483,647。