转自 http://www.lwolf.cn/blog/article/code/Csharp-spss-net.htm
这是最近做的项目涉及到的东西,要将一些SPSS数据(.sav)文件导进数据库中。本来是想在SPSS软件中将文件另存为excel文件,然后再在C# 里操作Excel就好了。后来又不打算这样做了,直接用C#操作SPSS数据文件。于是我就去网上找了下C#操作SPSS的类库,找到了SPSS.NET 这个类库,目前版本1.0,下载地址:http://spss.codeplex.com/,有源代码和直接的dll下载。
SPSS.NET 其实是调用了spssio32.dll,这个dll在安装了SPSS软件后就可以在安装目录里找到。我也不打算装SPSS,就去搜索了下看有没有 spssio32.dll下载,下载了一个SPSS 14版本的,放到system32目录。结果运行示例程序时提示找不到spssio32.dll。后来才看到说是SPSS.NET只能使用spss12或 13版本的spssio32.dll。只好再去寻找,无果。。后来还是同事下载了SPSS 13并安装后才得到需要的spssio32.dll。
现在还不是很深入了解怎么使用这个类库,只是看了下它的示例代码,是VB的,我转成C#的了

SpssDataDocument spssDoc = SpssDataDocument.Open("c:\\test.sav", SpssFileAccess.Read); //读取SPSS数据文件
还可以直接将文件转换成其他数据形式

SpssConvert.ToDataTable("c:\\test.sav");
读取SPSS的变量视图中的信息,变量名和标签等

SpssDataDocument doc = SpssDataDocument.Open(txtFilePath.Text, SpssFileAccess.Read);
foreach (SpssVariable var in doc.Variables)
{
Console.WriteLine("{0} {1}", var.Name, var.Label);
if (var is SpssNumericVariable)
{
SpssNumericVariable varNum = (SpssNumericVariable)var;
foreach (DictionaryEntry label in varNum.ValueLabels)
{
Console.WriteLine(" " + label.Key.ToString() + " " + label.Value.ToString());
}
}
}
foreach (SpssVariable var in doc.Variables)
{
Console.WriteLine("{0} {1}", var.Name, var.Label);
if (var is SpssNumericVariable)
{
SpssNumericVariable varNum = (SpssNumericVariable)var;
foreach (DictionaryEntry label in varNum.ValueLabels)
{
Console.WriteLine(" " + label.Key.ToString() + " " + label.Value.ToString());
}
}
}
读取数据视图中的数据

SpssDataDocument doc = SpssDataDocument.Open(txtFilePath.Text, SpssFileAccess.Read);
foreach (SpssVariable var in doc.Variables)
{
Console.Write(var.Name + " ");
}
Console.WriteLine("\r\n");
foreach (SpssCase row in doc.Cases)
{
foreach (SpssVariable var in doc.Variables)
{
if ((row[var.Name] == null))
{
Console.Write("<SYSMISS>");
}
else
{
Console.Write(row[var.Name]);
}
Console.Write(" ");
}
Console.WriteLine("\r\n");
}
foreach (SpssVariable var in doc.Variables)
{
Console.Write(var.Name + " ");
}
Console.WriteLine("\r\n");
foreach (SpssCase row in doc.Cases)
{
foreach (SpssVariable var in doc.Variables)
{
if ((row[var.Name] == null))
{
Console.Write("<SYSMISS>");
}
else
{
Console.Write(row[var.Name]);
}
Console.Write(" ");
}
Console.WriteLine("\r\n");
}
建立一个新的SPSS数据文件,使用SpssDataDocument.Create()方法

using (SpssDataDocument doc = SpssDataDocument.Create("c:\\example.sav"))
{
//定义字典
SpssStringVariable v1 = new SpssStringVariable();
v1.Name = "v1";
v1.Label = "What is your name?";
doc.Variables.Add(v1);
SpssNumericVariable v2 = new SpssNumericVariable();
v3.Name = "v2";
v3.Label = "What is your gender?";
v3.ValueLabels.Add(1, "Male");
v3.ValueLabels.Add(2, "Female");
doc.Variables.Add(v2);
doc.CommitDictionary();
//写入数据
SpssCase case1 = doc.Cases.New();
case1["v1"] = "Andrew";
case1["v2"] = 1;
case1.Commit();
SpssCase case2 = doc.Cases.New();
case2["v1"] = "Cindy";
case2["v2"] = 2;
case2.Commit();
}
{
//定义字典
SpssStringVariable v1 = new SpssStringVariable();
v1.Name = "v1";
v1.Label = "What is your name?";
doc.Variables.Add(v1);
SpssNumericVariable v2 = new SpssNumericVariable();
v3.Name = "v2";
v3.Label = "What is your gender?";
v3.ValueLabels.Add(1, "Male");
v3.ValueLabels.Add(2, "Female");
doc.Variables.Add(v2);
doc.CommitDictionary();
//写入数据
SpssCase case1 = doc.Cases.New();
case1["v1"] = "Andrew";
case1["v2"] = 1;
case1.Commit();
SpssCase case2 = doc.Cases.New();
case2["v1"] = "Cindy";
case2["v2"] = 2;
case2.Commit();
}