【问题标题】:C# OleDB, Importing from Excel, bad formatC# OleDB,从 Excel 导入,格式错误
【发布时间】:2021-10-06 13:12:55
【问题描述】:

我正在使用 OleDB 从 Excel 导入 DataGridView。 我正在导入的单元格具有此字符串“01/01/2029”,但是当我使用 OleDB 导入 DataGridView 时,当我想保留它时,该字符串将转换为 DateTime“01/01/2029 0:00:00”字符串使用他的原始格式“01/01/2029”。 我试图转换它和一堆东西,我找不到解决方案...... 谁能找到问题出在哪里?

string filePath = openFileDialog1.FileName;
        string extension = Path.GetExtension(filePath);
        string header = "YES";
        string conStr, sheetName;

        conStr = string.Empty;
        switch (extension)
        {

            case ".xls":
                conStr = string.Format(Excel03ConString, filePath, header);
                break;

            case ".xlsx":
                conStr = string.Format(Excel07ConString, filePath, header);
                break;
        }

        using (OleDbConnection con = new OleDbConnection(conStr))
        {
            using (OleDbCommand cmd = new OleDbCommand())
            {
                cmd.Connection = con;
                con.Open();
                DataTable dtExcelSchema = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString();
                con.Close();
            }
        }

        using (OleDbConnection con = new OleDbConnection(conStr))
        {
            using (OleDbCommand cmd = new OleDbCommand())
            {
                using (OleDbDataAdapter oda = new OleDbDataAdapter())
                {
                    DataTable dt = new DataTable();
                    cmd.CommandText = "SELECT * From [" + sheetName + "]";
                    cmd.Connection = con;
                    con.Open();
                    oda.SelectCommand = cmd;
                    oda.Fill(dt);
                    con.Close();

                    dataGridView1.DataSource = dt;
                }
            }
        }

【问题讨论】:

  • 这就是我得到postimg.cc/sQXJxBCN的结果。 Excel中单元格的格式是正确的。导入时我可以做些什么来保持 Excel 的单元格格式,因为我认为 OleDB 将其转换为 DateTime。我尝试过这样的事情,但它没有转换为字符串或替换任何东西......foreach (DataGridViewRow row in dataGridView1.Rows) { row.Cells[5].Value = row.Cells[5].Value.ToString().Replace("/01/", "JAN"); }

标签: c# datagridview oledb


【解决方案1】:

正如您的评论所指出的...... “所以我可以用 Replace("/01/", "JAN"); 修改它......这是不必要的。您很少想将DateTime 对象“更改”为string,这只会给您带来更多工作。您可以“格式化”网格DateTime 列,以生成您想要显示给用户的几乎任何日期/时间类型string

示例...具体到您的情况,我建议您将网格 DateTime 列的格式设置为...

dataGridView1.Columns[1].DefaultCellStyle.Format = "MMM dd, yyyy";

这会产生类似……“2021 年 1 月 1 日”

或者在格式中添加一个额外的“M”……

dataGridView1.Columns[1].DefaultCellStyle.Format = "MMMM dd, yyyy";

会产生类似...“2021 年 1 月 1 日”

【讨论】:

  • 谢谢,但我需要的日期格式例如是“07OCT21”。这就是为什么我需要将它转换为字符串,所以我可以将“/10/”替换为“OCT”。在我的 Excel 工作表中,日期格式如下“07/10/21”,并在通过 OleDB 导入 DataGridView 时转换为 DateTime“07/10/21 0:00:00”。
  • ???然后将网格列格式更改为“ddMMMyy”。正如我所提到的,您可以将字符串日期转换为您想要的任何格式。
  • 无效,因为当我需要“07OCT21”时它显示“07OCT.21”。
  • 读错了,但是当我需要“07OCT21”时它显示“07OCT.21”。当我将数据导出为文本时,我得到“07/10/2021 0:00:00”。
  • 您的网格列格式是什么样的?它必须添加“。”字符。
猜你喜欢
  • 2011-05-19
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 2016-07-05
相关资源
最近更新 更多