Невозможно получить импорт CSV с взаимодействием Excel, работающим должным образом (не разделяет данные) - PullRequest
0 голосов
/ 21 марта 2012

Я искал решение, предложенное здесь: C # Excel Interop: Открытие и отображение файла CSV

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 ?;

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Я думаю, что расширение - это ваша проблема. Я попробовал следующий код с расширениями 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 был расширением. Я предполагаю, что файлы CSV специального характера в Excel могут вызывать проблему

0 голосов
/ 21 марта 2012

Я не знаю, ошибочно ли вы скопировали этот код, но вы написали DateType: вместо DataType: .

.DataType должен быть правильным.(http://msdn.microsoft.com/en-us/library/ff837097.aspx)

Еще одна вещь, которую я часто делаю, чтобы помочь преодолеть проблемы взаимодействия с Excel, - это запись макроса при выполнении чего-либо с графическим интерфейсом (как вы сказали, ручное открытие файла в Excel ...) и просмотр того, чтокод макроса (в VB, но должен быть похожим) выглядит следующим образом.

...