C # .net читать из .xls отсутствует ячейка с содержимым 1 - PullRequest
0 голосов
/ 08 апреля 2011

Я пытался прочитать данные из файла xls, используя oledb. На листе был столбец с номерами во всех ячейках. Когда я выполнял код, этот конкретный столбец отсутствует каждый раз. Код, который я использовал:

OleDbConnection excel_connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + file_name + ";Extended Properties=Excel 8.0");
        excel_connection.Open();
        DataSet excel_data = new DataSet();
        OleDbDataAdapter myCommand = new OleDbDataAdapter("SELECT * FROM [XX$]", excel_connection);
        myCommand.Fill(excel_data);
        excel_connection.Close();
        int index = 0;
        string excel_columns;
        foreach (DataRow excel_row in excel_data.Tables[0].Rows)
        {
                excel_columns = String.Join(",", cells);
                richTextBox1.AppendText(excel_columns);

        }

Почему это происходит?

1 Ответ

3 голосов
/ 08 апреля 2011

Раньше я читал документ Excel, как вы, но у меня были проблемы с форматами столбцов, поэтому я решил переключиться на NPOI .Это хороший продукт и работает довольно хорошо.Реализация очень и очень проста.

Вот код:

using (FileStream Xlfile = new FileStream(MyFileName, FileMode.Open, FileAccess.Read))
{
    using (HSSFWorkbook XLBook = new HSSFWorkbook(Xlfile))
    {
    using (NPOI.SS.UserModel.Sheet XLSheet = XLBook.GetSheetAt(0))
    {
        NPOI.HSSF.UserModel.HSSFRow CurrentRow;
        NPOI.SS.UserModel.Cell CurrentCell;

        IEnumerator RowEnum = XLSheet.GetRowEnumerator();

        while (RowEnum.MoveNext())
        {
        iLoopRows++;

        if (RowEnum.Current != null)
        {
            rowCounter++;
            CurrentRow = RowEnum.Current as NPOI.HSSF.UserModel.HSSFRow;

            for (Int32 iLoop = 0; iLoop < CurrentRow.Cells.Count; iLoop++)
            {
            CurrentCell = CurrentRow.Cells[iLoop];

            switch (CurrentCell.CellType)
            {
                case NPOI.SS.UserModel.CellType.STRING:
                // Reading STRING value
                // CurrentCell.StringCellValue;
                break;
                case NPOI.SS.UserModel.CellType.NUMERIC:
                // Reading NUMERIC and DATA VALUES
                // (CurrentCell.DateCellValue == null) ? "" : CurrentCell.DateCellValue.ToString();
                break;
                default:
                break;
            }
            }
        }
        }
    }
    }
    Xlfile.Close();
}
...