Как проверить, существуют ли столбцы файла xls и импортировать только первые пять столбцов в c # - PullRequest
0 голосов
/ 17 апреля 2019

У меня на сервере один XLS-файл с 40 столбцами.

Мне нужен экспорт в CSV-файл этого XLS-файла, но только первые пять столбцов, а не остальные.

Я пробовал этот код, используя Linq безуспешно, потому что вывод в CSV пуст.

Вопрос: что я делаю не так?!

Заранее благодарю за помощь.

Мой полный код ниже:

    string filePath = HttpContext.Current.Server.MapPath(fileName.ToString());

    FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
    IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
    DataSet result = excelReader.AsDataSet();
    excelReader.Close();
    result.Tables[0].TableName.ToString();
    string csvData = "";
    int row_no = 0;
    int ind = 0;

    while (row_no < result.Tables[ind].Rows.Count)
    {
        string s1 = "";

        var columns = File
            .ReadLines(filePath)
            .SkipWhile(line => !string.IsNullOrWhiteSpace(line))
            .FirstOrDefault()
            .Split(new char[] { '\t', ',', ';' }, StringSplitOptions.RemoveEmptyEntries);

        List<string> expectedColumns = new List<string>() {
                "AAA",
                "BBB",
                "CCC",
                "DDD",
                "EEE"};

        if (expectedColumns.Except(columns, StringComparer.OrdinalIgnoreCase).Any())
        {
            // Some expected columns are not found; incorrect csv
        }
        else
        {
            for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
            {
                s1 += result.Tables[ind].Rows[row_no][i].ToString() + "|";
            }

            if (s1.Length > 160)
            {
                csvData += s1;
            }
        }

        row_no++;
        csvData += "\n";
    }

    output = HttpContext.Current.Server.MapPath(DateTime.Now.ToString("dd-MM-yyyy") + ".csv");
    newOutput = Path.GetFileName(output);
    StreamWriter csv = new StreamWriter(@output, false);
    csv.Write(csvData);
    csv.Close();
    csv.Dispose();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...