C#将文本文件保存到Excel

时间:2013-11-18 08:02:05

标签: c# excel

我有一个逗号分隔的文本文件。有些数字代表代码或信用卡号码,它们应在Excel中显示为TEXT,不应视为数字(左边是重要的)

这是我的代码:

m_objBooks.OpenText(
                    Filename: _fileInfo.FullName,
                    Origin: Microsoft.Office.Interop.Excel.XlPlatform.xlWindows,
                    StartRow: 1,
                    DataType: Microsoft.Office.Interop.Excel.XlTextParsingType.xlDelimited,
                    TextQualifier: Microsoft.Office.Interop.Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
                    ConsecutiveDelimiter: false,
                    Tab: false,
                    Semicolon: false,
                    Comma: true,
                    Space: false,
                    Other: false,
                    OtherChar: m_objOpt,
                    FieldInfo: m_objOpt,
                    TextVisualLayout: m_objOpt,
                    DecimalSeparator: m_objOpt,
                    ThousandsSeparator: m_objOpt,
                    TrailingMinusNumbers: m_objOpt,
                    Local: m_objOpt
                    );

                m_objBook = m_objExcel.ActiveWorkbook;

                // Save the text file in the typical workbook format and quit Excel.
                m_objBook.SaveAs(excelFile, Microsoft.Office.Interop.Excel.XlFileFormat.xlOpenXMLWorkbook,
                    m_objOpt, m_objOpt, m_objOpt, m_objOpt,
                    Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                    m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();

虽然代码和信用卡字段周围有双引号,但生成的excel文件仍会将它们视为数字,方法是删除Left Zero和类似的东西。为什么呢?

2 个答案:

答案 0 :(得分:2)

我已经在一个月内解决了这个问题。我发现使用这种方法存在很多问题。

最后,我在CodeProject网站上找到了一个很好的例子。

请看下面的例子。

A Very Easy to Use Excel XML Import-Export Library

我希望它有用。

答案 1 :(得分:0)

我设法通过传递正确的FieldInfo对象来解决这个问题。

在我的例子中,我将一个Missing对象传递给了FieldInfo参数。

而不是那样,我创建了一个数组对象并将其传递给FieldInfo参数。

以下是有关如何创建FieldInfo对象的示例:

int[,] _fieldInfo = new int[8,2]  // 8 = number of columns , 2 = number of properties (column number and column type (General = 1 , Text = 2 .. check: http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.workbooks.opentext.aspx )

//fill the array:
_fieldInfo[0,0] = 1; //column number
_fieldInfo[0,1] = 2; //column type (2 = text)

_fieldInfo[1,0] = 2;
_fieldInfo[1,1] = 2;

_fieldInfo[2,0] = 3;
_fieldInfo[2,1] = 2;

之后,我只是将_fieldInfo传递给方法,一切都完成了。当然,您可以使用此技术使用循环动态创建_fieldInfo。