[英]c# OleDbConnection Excel set date format
我們使用OleDBConnection將日期導出到Excel工作表,但是每個月的前12天會自動更改為美國格式(MM / dd / yyyy)。
這顯然與我們的數據有關!
我們在整個代碼中都對其進行了檢查,並且我們知道只有在創建文件並插入日期時,它才會被更改。
有沒有一種方法可以強制將日期設置為dd / MM / yyyy格式?
ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]
是日期,格式為dd / MM / yyyy hh:mm:ss
System.Data.OleDb.OleDbConnection newconn = new System.Data.OleDb.OleDbConnection();
try
{
string pathOfFileToCreate = "U:\\Visual Studio 2013\\Projects\\ANN\\FresnoDataCOC102-2.xlsx";
newconn.ConnectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"";", pathOfFileToCreate);
newconn.Open();
var cmd = newconn.CreateCommand();
cmd.CommandText = "CREATE TABLE sheet1 (Date1 DATETIME, PanEObserved DOUBLE, PanECalculated DOUBLE)";
cmd.ExecuteNonQuery();
for (int i = 0; i < training; i++) // Sample Data Insert
{
int day = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(0, 2));
int month = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(3, 2));
int year = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(6, 4));
DateTime date = new DateTime(year, month, day);
cmd.CommandText = String.Format("INSERT INTO Sheet1 (Date1, PanEObserved, PanECalculated) VALUES({0},{1},{2})", "#" + date + "#", ds.Tables[0].Rows[i][inputunits], outputs[i]);
cmd.ExecuteNonQuery(); // Execute insert query against excel file.
}
}
finally
{
conn.Close();
}
一個好的解決方法是改用格式化的字符串:
System.Data.OleDb.OleDbConnection newconn = new System.Data.OleDb.OleDbConnection();
try
{
string pathOfFileToCreate = "U:\\Visual Studio 2013\\Projects\\ANN\\FresnoDataCOC102-2.xlsx";
newconn.ConnectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 12.0 Xml;HDR=YES"";", pathOfFileToCreate);
newconn.Open();
var cmd = newconn.CreateCommand();
cmd.CommandText = "CREATE TABLE sheet1 (Date1 String/varhcar(100), PanEObserved DOUBLE, PanECalculated DOUBLE)"; //Check how to declare a varchar exactly.
cmd.ExecuteNonQuery();
for (int i = 0; i < training; i++) // Sample Data Insert
{
int day = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(0, 2));
int month = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(3, 2));
int year = Convert.ToInt32(Convert.ToString(ds.Tables[0].Rows[i][ds.Tables[0].Columns.Count - 1]).Substring(6, 4));
DateTime date = new DateTime(year, month, day);
String dateAux = date.ToString("dd/MM/yyyy");
cmd.CommandText = String.Format("INSERT INTO Sheet1 (Date1, PanEObserved, PanECalculated) VALUES({0},{1},{2})", "#" + dateAux + "#", ds.Tables[0].Rows[i][inputunits], outputs[i]);
cmd.ExecuteNonQuery(); // Execute insert query against excel file.
}
}
finally
{
conn.Close();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.