2010-03-21 75 views
2

使用Visual Studio 2008在C#中尝试使用文本文件加载Excel表。我当前的程序将完整的文件放在一个单元格中。有没有办法将每个数据点放在它自己的单元格中。遇到问题与excel交互以完成此任务。写入文本数据使用C#的excel文件

感谢

+0

一个“快”的方法是呈现为一个HTML表格,并调用文件的.xls。 Excel会读得很好,但你可能会弹出一个关于格式的提示。正确的方法将使用ADO或Excel互操作。 – 2010-03-21 17:57:52

+1

关于互操作的说明。 1)需要在机器上安装Excel; 2)在多用户环境(网络应用程序)中表现不佳。在这种情况下,CSV是更好的选择。 – NotMe 2010-03-21 18:15:54

+0

'和'?真?你标记了你的问题'和'? – 2010-03-22 14:07:12

回答

2

的Microsoft Excel 11.0对象库可能会帮助你。你必须在你的项目中referenct添加到它与包括命名空间:

using Microsoft.Office.Interop.Excel; 

http://support.microsoft.com/?scid=kb%3Ben-us%3B302096&x=10&y=10看看。 Theres更多信息。

+0

谢谢,让我到阵列。现在我只需要将文本文件转换为数组。这是理想的情况,因为我需要在将数据放入excel之前移动数据并对其进行处理。有任何想法吗? – Joe 2010-03-21 20:50:51

1

一个简单的方法是将您的文本文件输出为CSV file (comma separated values)。每一行都是一行,每一列在它们之间都有逗号。维基百科链接有很好的例子。 Excel文件很容易读取CSV文件。

如果您希望做的不仅仅是将数据导入到Excel中,而且需要格式化单元格,那么使用C#的Excel互操作性就是phimuemue所建议的方式。

0

Microsoft定义了一个与Excel 2002及更高版本兼容的XML电子表格格式。我已经使用过,并且非常满意。在MSDN上有一个gentle introduction和一些nitty-gritty documentation

这里是一个简短的代码说明你将如何使用它:

public void WriteExcelDocument(string filename, string[,] values) 
{ 
    using (var writer = XmlWriter.Create(filename)) 
    { 
     const string ss = "urn:schemas-microsoft-com:office:spreadsheet"; 

     writer.WriteProcessingInstruction("mso-application", "progid=\"Excel.Sheet\""); 
     writer.WriteStartElement("ss", "Workbook", ss); 
     writer.WriteStartElement("Worksheet", ss); 
     writer.WriteAttributeString("Name", ss, "Sheet1"); 
     writer.WriteStartElement("Table", ss); 

     for (var i = 0; i < values.GetLength(0); i++) 
     { 
      writer.WriteStartElement("Row", ss); 

      for (var j = 0; j < values.GetLength(1); j++) 
      { 
       writer.WriteStartElement("Cell", ss); 
       writer.WriteStartElement("Data", ss); 

       // Valid types are: Number, DateTime, Boolean, String, Error. 
       // To keep the example simple, I'm just doing strings. 
       writer.WriteAttributeString("Type", ss, "String"); 

       // If the cell contains a boolean, be sure to write "0" or "1" here, not 
       // "false" or "true". Again, I'm just doing strings, so it doesn't matter. 
       writer.WriteString(values[i, j]); 

       writer.WriteEndElement(); 
       writer.WriteEndElement(); 
      } 

      writer.WriteEndElement(); 
     } 

     writer.WriteEndElement(); 
     writer.WriteEndElement(); 
     writer.WriteEndElement(); 
    } 
} 

随意拿这个代码,并使用它或修改它,你认为合适的。我正在根据MIT许可证发布它。这只是一个起点;您可以修改它以处理不同的数据类型,列宽,样式,多个工作表等。

1

如上所述,您可以使用它来编写excel xml文档。它实际上是你需要的大部分功能的一个很好的包装。另外,如果你在服务器上没有安装excel的web应用程序中执行此操作,则不需要interop库。

http://www.carlosag.net/Tools/ExcelXmlWriter/