Разбор файла в DataTable - PullRequest
       42

Разбор файла в DataTable

0 голосов
/ 03 апреля 2020

Я должен проанализировать файл с расширением .xls в DataTable объект. Похоже, что файл - это текстовая таблица с фиксированной длиной столбцов в кодировке cp866, но я не смог прочитать ее с помощью соответствующей строки подключения.

Я могу успешно открыть такие файлы с помощью MS Excel и записать Открытие DBF 4 при его открытии. Ниже приведен пример попытки чтения такого файла в виде простого текста, и вы можете заметить, что некоторые символы не распознаются.

Может ли кто-нибудь помочь решить эту проблему?

enter image description here

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Предположим, файл поврежден dbf4. Вы можете попробовать прочитать его, используя пакет Microsoft.Office.Interop.Excel:

Application app = new Application { Visible = false };
Workbook wb = app.Workbooks.Open(fileFullName, UpdateLinks: 0, ReadOnly: true, CorruptLoad: 1);
Worksheet ws = wb.Worksheets.Item[1];
Range r = ws.UsedRange;

object[,] va = (object[,])r.Value2;
int rowLen = va.GetLength(0);
int colLen = va.GetLength(1);

StringBuilder sb = new StringBuilder();

for (int i = 1; i <= rowLen; i++)
{
    object[] row = new object[colLen];

    for (int j = 1; j <= colLen; j++)
    {
        row[j - 1] = va[i, j];
    }

    sb.AppendLine(string.Join(";", row));
}

string result = sb.ToString();

wb.Close(false, fileFullName, null);
Marshal.ReleaseComObject(wb);
app.Quit();
0 голосов
/ 03 апреля 2020

Предполагая, что файл xls является просто файлом DBF с переименованным расширением, используйте NDBFReader , это так же просто, как

using (var table = Table.Open("D:\\yourfile.xls"))
{
    return table.AsDataTable();
}

В случае, если обнаружение кодировки не работает, используйте

Table.Open("D:\\yourfile.xls",Encoding.GetEncoding("CP866"));
...