您好我已经在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。 尽管如此,还是一个有趣的问题。
答案 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 } };