Python 将xlwt生成的excel文件导入SAS

Python 将xlwt生成的excel文件导入SAS,python,excel,sas,xlwt,Python,Excel,Sas,Xlwt,我使用xlwt将一堆csv文件转换为excel文件。 之后,我需要将这些excel文件导入SAS(统计软件) 第一次尝试时,SAS会抛出一个错误,指出文件格式无效 但是,当我只是用MS Excel打开生成的任何文件并关闭而不做任何更改和保存时,文件就成功导入SAS 我发现MS Excel更改了文件头,添加了当前用户名,并更新了文件修改日期 我想知道在保存excel文件之前是否有可能修改它的二进制头 更新: 我使用的是xlwt版本0.7.4, Python 2.7.3, SAS 9.3, Exce

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

第一次尝试时,SAS会抛出一个错误,指出文件格式无效

但是,当我只是用MS Excel打开生成的任何文件并关闭而不做任何更改和保存时,文件就成功导入SAS

我发现MS Excel更改了文件头,添加了当前用户名,并更新了文件修改日期

我想知道在保存excel文件之前是否有可能修改它的二进制头

更新: 我使用的是xlwt版本0.7.4, Python 2.7.3, SAS 9.3, Excel 2010, Windows7 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导入功能使用的选项:

...
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是一个复杂的主题,因为有许多不同类型的Excel工作簿

直接读取CSV文件并跳过转换到Excel会容易得多。使用PROC IMPORT读取CSV文件时,SAS会检查文件的前几行以确定列类型。默认情况下,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中猜测行的最大值;如果您使用的是9.3,则最大值已增加到2147483647。

如何使用SAS访问Excel文件?ie:ODBC扩展(请注意,我从2004年起就没有使用过SAS!)放在一边-您最好只将CSV数据导入到SASS中。谢谢您的回复。实际上,统计人员正在使用SAS,正如他们所描述的,导入csv文件的问题是SAS根据csv文件的第一个原始数据设置字段大小。如果文档后面的字段中有较长的字符串,SAS在处理这些字符串时会遇到问题。如我所见,Excel文件是使用SAS查询语言导入的。但不确定我的定义是否正确。我相信可以显式设置长度(即$char100.)。。。如果没有-另一个选项是将CSV转换为固定长度记录,并生成适合在
infle
/
input
语句中使用的代码位。。。(就像我说的,我已经生锈了)-如果是
xlwt的问题,那么它也有自己的邮件列表,项目的创建者会对此做出响应,所以这可能值得考虑……嗨,我是xlwt的维护者。您能否引用从SAS收到的确切错误消息?您使用的是什么版本的xlwt?请显示您为将CSV文件转换为XLS文件而编写的代码。请显示一个小的(2或3行)csv文件,这会导致问题。一定要走csv路线。转换为Excel将其输入SAS就像在吃香蕉之前先把香蕉腐烂一样。SAS使用CSV格式比使用excel工作得更好。您也可以手工编写输入代码,而不是使用PROC IMPORT;然后您可以直接指定每一列的格式/长度。谢谢!看起来是个好办法。我和统计学家谈过,他们没有使用“猜测行”参数。正在等待他们的更新。