c# Excel 讀取,StreamWriter寫入檔案
阿新 • • 發佈:2019-02-13
經常會遇見把excel資料讀出來,轉變成自己需要的格式,程式碼如下:
static void ChangeFileFormat(string strExcelPath, string newFileName, int rowOff=0,params int[] arrRmColumn)
{
DataTable dataTable = GetExcelTableByOleDB(strExcelPath);
StringBuilder strContent = new StringBuilder();
for (int i = rowOff; i < dataTable.Rows.Count; i++)
{
Object[] arrItem = dataTable.Rows[i].ItemArray;
string rowData = string.Empty;
for (int column = 0; column < arrItem.Length; column++)
{
bool bAddColumn = true ;
if (arrRmColumn != null)
{
for (int rmcolumnIndex = 0; rmcolumnIndex < arrRmColumn.Length; ++rmcolumnIndex)
{
if (arrRmColumn[rmcolumnIndex] == column)
{
bAddColumn = false ;
break;
}
}
}
if (bAddColumn)
{
rowData += (arrItem[column] + ">");
}
}
strContent.Append(rowData + "\n");
}
string strTargetFilePath = System.Environment.CurrentDirectory + "\\TargetFile\\" + newFileName;
if (File.Exists(strTargetFilePath))
{
File.Delete(strTargetFilePath);
}
using (StreamWriter write = new StreamWriter(strTargetFilePath))
{
write.Write(strContent.ToString());
write.Flush();
}
Console.WriteLine("change successfully!");
}
public static DataTable GetExcelTableByOleDB(string strExcelPath)
{
try
{
DataTable dtExcel = new DataTable();
//資料表
DataSet ds = new DataSet();
//獲取副檔名
string strExtension = System.IO.Path.GetExtension(strExcelPath);
string strFileName = System.IO.Path.GetFileName(strExcelPath);
//Excel的連線
OleDbConnection objConn = null;
switch (strExtension)
{
case ".xls":
objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 8.0;HDR=NO;IMEX=1;\"");
break;
case ".xlsx":
objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel 12.0;HDR=NO;IMEX=1;\"");
break;
default:
objConn = null;
break;
}
if (objConn == null)
{
return null;
}
objConn.Open();
//獲取Excel中所有Sheet表的資訊
DataTable schemaTable = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
//獲取Excel的第一個Sheet表名
string tableName = schemaTable.Rows[0][2].ToString().Trim();
string strSql = "select * from [" + tableName + "]";
//獲取Excel指定Sheet表中的資訊
//OleDbCommand objCmd = new OleDbCommand(strSql, objConn);
OleDbDataAdapter myData = new OleDbDataAdapter(strSql, objConn);
myData.Fill(ds, tableName);//填充資料
objConn.Close();
//dtExcel即為excel檔案中指定表中儲存的資訊
dtExcel = ds.Tables[tableName];
return dtExcel;
}
catch
{
return null;
}
}