[英]Export to Excel - preventing phone numbers from scientific notation in C#
[英]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行)以確定列的格式。 如果列是“混合的”,則默認為文本。 聽起來非日期數據要等到文件中的較低位置才出現。
您可以通過修改注冊表來增加它向前看的行數:
HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Jet\\4.0\\Engines\\Excel\\TypeGuessRows
如果最后使用DateTime
並將其轉換為整數值,則可以使用
readonly DateTime baseDate = new DateTime(1899,12,31); //This is constant
var d = /* DateTime from Excel */
int originalValue = d.Subtract(baseDate).TotalDays;
拋棄駕駛員。 請改用Excel互操作 。 然后,您可以讀取基礎單元格值,格式化值或所需的任何內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.