私はC#アプリケーションを書いて、セルの値を読み込んで自分のアプリケーションに表示しました。 decimalSeperatorの領域設定が.
で、groupSeperatorが,
の場合はうまく動作しますが、decimalSeperatorとgroupseperatorの設定が.
と,
から変更された場合は、値が間違っています。Excel番号国際的な設定問題の書式設定
以下のreadValues
では、読み取るセル値は23.14
です。国際設定はヨーロッパの国のため、値は23,14
です。しかし、私がstrNumberCell
に入れている値は2314
です。どうしてこれなの?
private DataSet _ds = new DataSet();
public Form1()
{
InitializeComponent();
LoadExcel();
ReadValues();
}
private void ReadValues()
{
//The cell value to be read is 23.14
//Since the International setting for Europe country its value is 23,14
//Value i am getting in strNumberCell is 2314
string strNumberCell = _ds.Tables[1].Rows[1].ItemArray[2].ToString();
}
private void LoadExcel()
{
try
{
// XLSX - Excel 2007, 2010, 2012, 2013
using (OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" +
"Data Source=" + System.Windows.Forms.Application.StartupPath + "\\Test.xlsx;" +
"Extended Properties=Excel 12.0 Xml;"))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = conn;
// Get all Sheets in Excel File
System.Data.DataTable dtSheet = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
// Loop through all Sheets to get data
foreach (DataRow dr in dtSheet.Rows)
{
string sheetName = dr["TABLE_NAME"].ToString();
if (!sheetName.EndsWith("$"))
continue;
// Get all rows from the Sheet
cmd.CommandText = "SELECT * FROM [" + sheetName + "]";
System.Data.DataTable dt = new System.Data.DataTable();
dt.TableName = sheetName;
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
da.Fill(dt);
_ds.Tables.Add(dt);
}
cmd = null;
conn.Close();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + " at LoadExcel function.", "Exception", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
タブ全体のセルプロパティを一般的なテキストに設定してから値をコピーすることはできますか?それは最も簡単な方法になります –
オブジェクト 'ItemArray [2]'が何であるか分かりませんが、なぜ '.ToString()'を使用していますか?代わりに 'double'または' decimal'を得ることができるかもしれませんか? – JOG