不好意思想請問各位大神!
最近在寫C#使用NPOI將SQL查詢出來的資料匯成Excel檔案
但是發現匯出來的資料都會是文字型態,而有找過幾個網站試了他們的方法都沒有用
所以想說發上來詢問一下有沒有方法或是關鍵字可以找尋
這張圖是我使用SQL語法查詢出來的
語法如下
declare @todayYM varchar(6)
set @todayYM = convert(varchar(6),getdate()-8,112) /*當月8號前都可以查詢到上個月的資料*/
SELECT [TC001] AS 移轉單單別
,[TC002] AS 移轉單單號
,[TC003] AS 移轉單序號
,[TC047] AS 產品品號
,[TC038] AS 驗收日期
,SUBSTRING([TC038],7,8) AS 驗收_日
/*,DAY([TC038]) AS 驗收_日*/
,(case [TC007]
when ' ' then ' '
when '0010' then '10捲條'
when '0020' then '20成型'
when '0025' then '25組立前'
when '0030' then '30組立'
when '0040' then '40塗裝'
when '0050' then '50包裝'
else '61委外'
end
) 製程
,[TC007] AS 移出製程
,[TC009] AS 移入製程
,Convert(decimal(18,0),[TC014]) AS 移轉數量
FROM C
然後我的C#語法 是以下
SqlConnection conn = new SqlConnection("data source=x; initial catalog =y; user id =z; password =a");
conn.Open();
string savelocate = label6.Text + "\\";
string day = DateTime.Now.ToString("yyyyMMdd");
int rowIndex = 4;
string SQL_32 = "=====以上的語法=====";
SqlDataAdapter ap32 = new SqlDataAdapter(SQL_32, conn);
DataSet ds32 = new DataSet();
ap32.Fill(ds32, "xx表");
DataTable dt32 = ds32.Tables["xx表"];
string fileName9 = savelocate + day + "xx表" + ".xlsx";
XSSFWorkbook wb9 = new XSSFWorkbook(); //建立--活頁簿
ISheet sheet32 = wb9.CreateSheet("xx表");
//-----設定--xx表--樣式-----//
ICellStyle header_Style9 = wb9.CreateCellStyle();
IFont header_Font9 = wb9.CreateFont();
ICellStyle data_Left9 = wb9.CreateCellStyle(); //靠左對齊
ICellStyle data_Right9 = wb9.CreateCellStyle(); //靠右對齊
ICellStyle data_Center9 = wb9.CreateCellStyle(); //置中對齊
IFont data_Font9 = wb9.CreateFont();
ICellStyle data_Time9 = wb9.CreateCellStyle();
//匯入資料
sheet32.CreateRow(rowIndex);
for (int i = 0; i < dt32.Columns.Count; i++)
{
sheet32.GetRow(rowIndex).CreateCell(i).SetCellValue(dt32.Columns[i].ColumnName);
sheet32.SetAutoFilter(new CellRangeAddress(4, 4, 0, dt32.Columns.Count - 1));
sheet32.GetRow(rowIndex).GetCell(i).CellStyle = data_Center9;
sheet32.GetRow(rowIndex).Height = 25 * 20;
}
for (int i = 0; i < dt32.Rows.Count; i++)
{
sheet32.CreateRow(i + 5);
for (int j = 0; j < dt32.Columns.Count; j++)
{
sheet32.GetRow(i + 5).CreateCell(j).SetCellValue(dt32.Rows[i][j].ToString());
sheet32.GetRow(i + 5).GetCell(j).CellStyle = data_Center9;
sheet32.GetRow(i + 5).Height = 20 * 20;
}
sheet32.GetRow(i + 5).GetCell(1).CellStyle = data_Left9;
}
FileStream file9 = new FileStream(@fileName9, FileMode.Create);
wb9.Write(file9);
file9.Close();
不好意思程式碼可能有點長,但想要讓大家可以清楚一點我的格式所以才發出這麼多,想知道可以在哪邊加入合適的程式碼讓我移轉數量的欄位在匯出的Excel上可以是數值型態的。
XSSFWorkbook wb9 = new XSSFWorkbook(); //建立--活頁簿
ISheet sheet32 = wb9.CreateSheet("1108");
int rowIndex = 2;
sheet32.CreateRow(rowIndex);
sheet32.GetRow(rowIndex).CreateCell(5).SetCellValue(Convert.ToDouble("123"));
sheet32.GetRow(rowIndex).CreateCell(6).SetCellValue(Convert.ToDouble("123.45"));
sheet32.GetRow(rowIndex).CreateCell(7).SetCellValue(Convert.ToDouble("56.789"));
rowIndex++;
sheet32.CreateRow(rowIndex);
sheet32.GetRow(rowIndex).CreateCell(5).SetCellValue(Convert.ToDouble("456"));
sheet32.GetRow(rowIndex).CreateCell(6).SetCellValue(Convert.ToDouble("123.45"));
sheet32.GetRow(rowIndex).CreateCell(7).SetCellValue(Convert.ToDouble("56.789"));
string filename = @"d:\NPOI1108.xls";
FileStream file9 = new FileStream(filename, FileMode.Create);
wb9.Write(file9);
file9.Close();
sheet32.GetRow(i + 5).CreateCell(j).SetCellValue(dt32.Rows[i][j].ToString());
改成
if j==dt32.Columns.Count-1 {
sheet32.GetRow(i + 5).CreateCell(j).SetCellValue(dt32.Rows[i][j]);
} else {
sheet32.GetRow(i + 5).CreateCell(j).SetCellValue(dt32.Rows[i][j].ToString());
}
試看看
感謝回覆!
目前改成以上這樣,因為怕格式可能會影響到所以我都先去除了,不過目前還是不行,還是會呈現以下的這個文字型態。
改成以上這樣
這樣改等於沒改
由於迴圈寫的是j<dt32.Columns.Count
以致於迴圈裡面的if j==dt32.Columns.Count
沒機會成立
了解了,可能當時腦袋還沒有轉過來。
目前的話我的疑惑解決了,有使用到海綿寶寶您的用法,不過還是要把資料型態改成數字型態才行,我參考了一樓 allenlwh的方法,所以程式碼改成以下。
if (j == dt32.Columns.Count-1)
{
sheet32.GetRow(i + 5).CreateCell(j).SetCellValue(Convert.ToDouble(dt32.Rows[i][j].ToString()));
sheet32.GetRow(i + 5).GetCell(j).CellStyle = data_money9;
sheet32.GetRow(i + 5).Height = 20 * 20;
}
else
{
sheet32.GetRow(i + 5).CreateCell(j).SetCellValue(dt32.Rows[i][j].ToString());
sheet32.GetRow(i + 5).GetCell(j).CellStyle = data_Center9;
sheet32.GetRow(i + 5).Height = 20 * 20;
}
這樣就成功囉,謝謝你們的回覆!!