我在看这里建议的解决方案: C# Excel Interop: Opening and Showing CSV file
excel.Workbooks.OpenText(filename,
DataType: Excel.XlTextParsingType.xlDelimited,
TextQualifier: Excel.XlTextQualifier.xlTextQualifierNone,
ConsecutiveDelimiter: true,
Semicolon: true);
此代码打开CSV文件,但不分割分号上的数据。
如果我在Excel中手动打开文件并使用此处指定的相同选项,它可以正常工作,所以我必须遗漏一些东西。
有什么建议吗?
更新:部分CSV
> Betalings Enveloppe;;;;Dossier;ACME ;;;;Dagboek;;F4 - AAA
> 46846846-;;; ;;;;Rekening;54654684684684;;;;BIC;;null;;; ;;;;Betaal
> datum;Fri Mar 16 00:00:00 CET 2012;;;;EnveloppeId;;0002;;;
> Document;;Datum;Rekeningnummer;;;;BIC;Referentie;;Leverancier;;;Bedrag;
> 2012/A1/268;;29/02/2012;BE94684684684128;;;;BBRUBEBB;BLUB ;;DOKTER WHO
> ;;;28.0 ?;
答案 0 :(得分:1)
我认为扩展是你的问题。我尝试使用CSV和TXT扩展的以下代码,它作为TXT工作,但不作为CSV。
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
public class ExcelInteropTest
{
//private static Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
public static void Parse(String filename)
{
var _app = new Excel.Application();
var _workbooks = _app.Workbooks;
_workbooks.OpenText(filename,
DataType: Excel.XlTextParsingType.xlDelimited,
TextQualifier: Excel.XlTextQualifier.xlTextQualifierNone,
ConsecutiveDelimiter: true,
Semicolon: true);
Excel.Sheets sheets = _workbooks[1].Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
List<String[]> excelData = new List<string[]>();
for (int i = 1; i <= 6; i++)
{
Excel.Range range = worksheet.get_Range("A" + i.ToString(), "Z" + i.ToString());
System.Array myvalues = (System.Array)range.Cells.Value;
string[] strArray = myvalues.OfType<object>().Select(o => o.ToString()).ToArray();
excelData.Add(strArray);
}
foreach (var item in excelData)
{
Console.WriteLine(String.Join("|",item));
}
}
}
我所做的只是为每一行创建一个字符串数组并将其添加到列表中,然后我只写了每个数组(在管道'|'上连接,看起来它在TXT是扩展时正确地拆分了所有内容。我猜想excel中特殊的CSV文件可能会导致问题
答案 1 :(得分:0)
我不知道您是否错误复制了该代码,但拼写了 DateType:而不是 DataType:。
要进行任何分隔,DataType必须正确。 (http://msdn.microsoft.com/en-us/library/ff837097.aspx)
我经常做的另一件事就是帮助过去的excel互操作挑战是在使用gui做某事时记录一个宏(就像你说的那样,在excel中手动打开文件......)并查看宏代码(在VB中,但是应该是相似的)看起来像。