最近碰到这么一个需求,客户要求把一个Excel工作簿里的所有的工作表都给单独的拆分出来,不仅要数据连格式也要保持,捯饬了一上午看到了点结果,呵呵,偶是菜鸟大家表笑话,如果有更好的方法可以分享一下……
public void SplitExcelBooks(string strSourceExcel)
{
string strConn = "Provider=Microsoft.Jet.Oledb.4.0;Data Source=\'" + strSourceExcel + "\';Extended Properties=\'Excel 8.0;HDR=Yes;IMEX=1;\'";
OleDbConnection conn = new OleDbConnection(strConn);
if (conn.State == ConnectionState.Closed)
{
conn.Open();
}
DataSet ds = new DataSet();
//获取Excel中所有工作表的名称
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
if (null != dt && dt.Rows.Count > 0)
{
Object missing = Missing.Value;
Microsoft.Office.Interop.Excel.Application m_objExcel = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbooks m_objWorkBooks = m_objExcel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook m_objWorkBook = m_objWorkBooks.Open(strSourceExcel, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
Microsoft.Office.Interop.Excel.Sheets m_objWorkSheets = m_objWorkBook.Sheets;
for (int i = 0; i < dt.Rows.Count; i++)
{
//获取Excel的第i个sheet表(注:Excel中的sheet表是从1开始的)
Microsoft.Office.Interop.Excel.Worksheet m_objWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)m_objWorkSheets[i + 1];
Microsoft.Office.Interop.Excel.Workbooks m_objBooksNew = m_objExcel.Workbooks;
Microsoft.Office.Interop.Excel.Workbook m_objBookNew = (Microsoft.Office.Interop.Excel.Workbook)(m_objBooksNew.Add(true));
Microsoft.Office.Interop.Excel.Worksheet m_objWorkSheetNew = (Microsoft.Office.Interop.Excel.Worksheet)m_objBookNew.Worksheets[1];//取得sheet
m_objWorkSheet.Copy(m_objWorkSheetNew, missing);//将m_objWorkSheet表复制到新建立的m_objWorkSheetNew表中
m_objWorkSheetNew.SaveAs("+你要保存的路径+", missing, missing, missing,
missing, missing, missing, missing, missing, missing);
}
}
}