簡體   English   中英

C#防止excel自動更改我的日期

[英]C# Preventing excel from automtically changing my numbers to date

我目前正在嘗試使用C#將XLS文件轉換為CSV文件,而不使用任何excel庫。 我已經設法將其從XLS轉換為CSV,但是我目前面臨一個問題,其中包含數字的行會自動轉換為datetime格式,因為上面的第一個單元格是datetime。 我無法更改原始文件的格式。

這是我的代碼,用於將xls轉換為csv:

protected static void convertExcelToCsv(string inputFile, string outputFile)
    {

        int worksheetNumber = 1;

        var cnnStr = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=NO\"", inputFile);
        var cnn = new OleDbConnection(cnnStr);

        var dt = new DataTable();

        cnn.Open();
        var schemaTable = cnn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        string worksheet = schemaTable.Rows[worksheetNumber - 1]["table_name"].ToString().Replace("'", "");
        string sql = String.Format("SELECT * FROM [{0}]", worksheet);
        var da = new OleDbDataAdapter(sql, cnn);



        da.Fill(dt);

        cnn.Close();

        using (var wtr = new StreamWriter(outputFile))
        {
            foreach (DataRow row in dt.Rows)
            {


                bool firstLine = true;
                foreach (DataColumn col in dt.Columns)
                {
                    if (!firstLine) { wtr.Write(","); } else { firstLine = false; }
                    var data = row[col.ColumnName].ToString().Replace(",", "");
                    wtr.Write(data);
                }
                wtr.WriteLine();
            }
        }


    }

問題

在IMEX模式下,驅動程序查看前幾行(默認為8行)以確定列的格式。 如果列是“混合的”,則默認為文本。 聽起來非日期數據要等到文件中的較低位置才出現。

解決方案1

您可以通過修改注冊表來增加它向前看的行數:

HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Jet\\4.0\\Engines\\Excel\\TypeGuessRows

解決方案#2

如果最后使用DateTime並將其轉換為整數值,則可以使用

readonly DateTime baseDate = new DateTime(1899,12,31);  //This is constant

var d = /* DateTime from Excel */
int originalValue = d.Subtract(baseDate).TotalDays;

解決方案#3

拋棄駕駛員。 請改用Excel互操作 然后,您可以讀取基礎單元格值,格式化值或所需的任何內容。

暫無
暫無

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

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