C#Excel文本到列问题

时间:2011-02-09 13:40:55

标签: c# excel

您好我已经在C#中将文本调用为列函数,但它并没有像我希望的那样。

我在工作表的第一个单元格中有这些数据。

Guest;0;12/10/2010 03:46:34 PM;66082

如果我从Excel手动运行Text to Column,我会得到。

Guest   0   12/10/2010 15:46    66082

但是,如果我查看了我的C#代码,我就会得到。

Guest   0   10/12/2010 15:46    66082

日期格式已从“DD / MM / YYYY”切换为“MM / DD / YYYY”

这是我的C#代码

((Range)ws.Cells[1,1]).EntireColumn.TextToColumns(
Type.Missing, Excel.XlTextParsingType.xlDelimited,
 Excel.XlTextQualifier.xlTextQualifierNone, Type.Missing,
 Type.Missing, true, Type.Missing,
 Type.Missing, Type.Missing,
 Type.Missing, Type.Missing,
 Type.Missing, Type.Missing);

我甚至从Excel录制了宏。

Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1), Array(4, 1))

我唯一不能尝试的是FieldInfo。不知道如何将其转换为C#。谷歌也没多大帮助。我有点怀疑它是xlGeneralFormat。

任何想法?感谢。

object fieldInfo = new int[4,2] {{1,1},{2,1},{3,1},{4,1}};

好的,我意识到问题不在于FieldInfo,即使我省略了它也能正常运行。

问题在于此。

wb.Close(true, saveFileDialog1.FileName, Type.Missing);

我把它保存到另一个文件中。并发现原始文件的格式是我想要的。但新保存的文件格式错误。

我注释了关闭线,并手动保存。旧文件仍处于分隔格式,而新文件的格式仍然错误。

显然,对象FileName只有在它是“saveFileDialog1.FileName”时才有效。换句话说,只有当它是相同的文件名时它才有效。我尝试了Type.Missing和@“C:\ lalala.xls”,它没有发短信到列。

我只是意识到Text to column中的格式甚至不起作用.- 好的,我放弃了。我要将DateTime转换为Excel Serial DateTime。 尽管如此,还是一个有趣的问题。

3 个答案:

答案 0 :(得分:1)

我所拥有的书(使用VBA和.NET编程Excel,Webb& Saunders)简单地将FieldInfo描述为“描述文本中字段的数据类型的数组”。所以它确实应该出现解决方案,但宏不包括任何日期格式。

MSDN参考文档更有用:

http://msdn.microsoft.com/en-us/library/04b02wh9%28v=VS.80%29.aspx

是的,它是一个数组:实际上是一个值对的数组(因此宏中的数组数组)。第一个值是列号。第二个值是XlColumnDataType常量。 定义如下:

http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.xlcolumndatatype.aspx

请注意日期格式列表。看起来你需要第三列的xlDMYFormat或xlMDYFormat值?

如果您知道哪个列包含日期(如上所述),那么您也可以在之后明确设置格式。使用数组保存faffing虽然它确实将它变成了两个阶段的过程。

答案 1 :(得分:1)

重新录制宏并在向导的3步中设置相关列的格式,为您提供正确的数组值。使用这些值,我认为调用应如下所示:

int[][] fieldInfoArray = { new int[] { 1, 1 }, new int[] { 2, 1 }, new int[] { 3, 3 }, new int[] { 4, 1 } };    
((Range)ws.Cells[1,1]).EntireColumn.TextToColumns(
     Type.Missing, Excel.XlTextParsingType.xlDelimited,
     Excel.XlTextQualifier.xlTextQualifierNone, Type.Missing,
     Type.Missing, true, Type.Missing,
     Type.Missing, Type.Missing,
     Type.Missing,
     (object)fieldInfoArray,
     Type.Missing, Type.Missing);

答案 2 :(得分:0)

它要求一个数组,你必须发送一个数组。

Array fieldInfoArray = new int[,] { { 1, 1 },  { 2, 1 }, { 3, 3 }, { 4, 1 } };

((Range)ws.Cells[1,1]).EntireColumn.TextToColumns(
Type.Missing, Excel.XlTextParsingType.xlDelimited,
 Excel.XlTextQualifier.xlTextQualifierNone, Type.Missing,
 Type.Missing, true, Type.Missing,
 Type.Missing, Type.Missing,
 FieldInfoArray, Type.Missing,
 Type.Missing, Type.Missing);

可选您只能使用要更改格式的列,其他列将保留“常规”。 第一个是列号,第二个是格式。

Array fieldInfoArray = new int[,] { { 3, 3 } };