2

.xlsx、.xls、.csv ファイルの読み取りに ExcelDataReader を使用していますが、読み取りではすべてが文字列として扱われるため、#N/A または #value! も文字列として扱われ、計算しようとすると例外が発生します。

 FileStream stream = File.Open(strFilePath, FileMode.Open, FileAccess.Read);

            //Reading from a binary Excel file ('97-2003 format; *.xls)
            string extension = System.IO.Path.GetExtension(strFilePath).ToLower();
            IExcelDataReader excelReader;
            if (extension.Equals(".csv"))
            {
                excelReader = ExcelReaderFactory.CreateCsvReader(stream);
            }
            else if (extension.Equals(".xls"))
            {
                excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
            }
            else
            {
                excelReader = ExcelReaderFactory.CreateOpenXmlReader(stream);
            }

            //...
            //DataSet - The result of each spreadsheet will be created in the result.Tables
            //DataSet - Create column names from first row
            DataSet result = excelReader.AsDataSet(new ExcelDataSetConfiguration()
            {
                ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
                {
                    UseHeaderRow = true
                }
            });
            excelReader.Close();
            return result.Tables[sheetno];

これは、Excel ファイルのインポートに使用するコードです。#N/A または #value を読み取るように変更するにはどうすればよいでしょうか。0またはNULLとして?

4

1 に答える 1

0

これは ExcelDataReader の XLSX パーサーのバグであり、ライブラリでコードを修正する必要があります。

バグはここで追跡されています: https://github.com/ExcelDataReader/ExcelDataReader/issues/329

XLS を使用した ExcelDataReader は期待どおりに動作します。エラーのあるフィールドに対して NULL を返します。

CSV 形式ではエラー文字列と通常の文字列が区別されないため、CSV を使用した ExcelDataReader は引き続きエラーを文字列として返す可能性があります。

于 2018-04-16T15:26:58.847 に答える