簡體   English   中英

Excel單元格格式問題

[英]Excel Cell Formatting Problem

我正在使用OleDB DataReader從我的excel文件中獲取數據(但是這個問題也出現在DataTable.Fill中)。 問題是我有一個應該返回字符串的列。 一切都很好並且工作但是最近出現了一個問題,因為列的單元格具有不同的格式。 有些是數字,有些是文本。 當我使用dataReader.GetSchema()檢查時,它顯示有問題的列被推斷為類型System.String。 這個問題是所有非文本單元格都立即設置為null。

有沒有辦法向讀者建議該列應該只是將列解析為System.Object而不是將其推斷為System.String並轉儲所有非字符串單元格?

我正在使用的連接字符串是:

string connString =“Provider = Microsoft.Jet.OLEDB.4.0;” +“數據源=”+ filePath +“;” +“擴展屬性= Excel 8.0;”;

而代碼是:

using ( OleDbConnection connection = new OleDbConnection( connString ) )
{
    connection.Open();
    foreach ( string worksheetName in worksheetNames )
    {
        using ( OleDbCommand command = 
            new OleDbCommand( "SELECT * FROM [" + worksheetName + "]", connection ) )
        {
            TEntity entity;
            using ( OleDbDataReader dataReader = command.ExecuteReader() )
            {
                while ( dataReader.Read() )
                {
                    entity = GetDataFromDataTable( dataReader );

                    if ( entity != null )
                    {
                        entityList.Add( entity );
                    }
                }
            }
        }
    }
    connection.Close();
}

您需要將IMEX或MAXSCANROWS添加到連接字符串。

MAXSCANROWS - 要掃描的行數,以確定每列的數據類型。 根據找到的最大數據類型確定數據類型。 如果遇到的數據與為該列猜測的數據類型不匹配,則數據類型將作為NULL值返回。

對於Microsoft Excel驅動程序,您可以輸入1到16之間的數字來掃描行。 該值默認為8; 如果設置為0,則掃描所有行。 (超出限制的數字將返回錯誤。)

此外,請查看位於注冊表REG_DWORD“TypeGuessRows”的[HKEY_LOCAL_MACHINE \\ SOFTWARE \\ Microsoft \\ Jet \\ 4.0 \\ Engines \\ Excel]。 這是不讓Excel僅使用前8行來猜測列數據類型的關鍵。 將此值設置為0可掃描所有行。 這可能會影響性能。

想到兩件事:

  1. 什么類型的'TEntity'。 是限於字符串還是其他類型?

  2. 什么類型的列表是entityList。 它是Generic,還是List(TEntity)或其他類型?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM