要做一個功能選擇檔案夾,其中包含多個EXCEL,然后匯入各個EXCEL中的資料。
uj5u.com熱心網友回復:
請詳細描述您的需求,我也來看看。uj5u.com熱心網友回復:
首先 默認html的input type=file是不可能選擇檔案夾的.所以如果你要求選擇檔案夾 那么你只能采用第三方控制元件.選擇了檔案夾之后,無非就是上傳,第三方控制元件估計也有這個功能.
至于匯入無非就是你上傳了之后 讀取xls 也請使用第三方控制元件(npoi)
uj5u.com熱心網友回復:
請問C++如何使用npoi的庫啊
uj5u.com熱心網友回復:
我用C#做了一個。不過好像格式統一要uj5u.com熱心網友回復:
在前臺先放一個FileUpload控制元件用來選擇檔案:<asp:FileUpload ID="fulImport" runat="server" Height="20px" Width="200px" />
樣式可以自己再編輯;再定義一個按鈕用來匯入
<asp:Button ID="btnImport" runat="server" Height="20px" Text="上傳" OnClick="btnImport_Click" />
后臺:
protected void btnImport_Click(object sender, EventArgs e)
{
//獲取檔案名
string strFileName = fulImport.FileName;
//驗證檔案型別是不是Excel
if (strFileName.Substring(strFileName.LastIndexOf('.')) != ".xlsx" && strFileName.Substring(strFileName.LastIndexOf('.')) != ".xls")
{
//提示錯誤資訊.....
}
}
/// <summary>
/// 獲取Excel資料
/// </summary>
/// <param name="filePath">檔案的路徑</param>
/// <returns></returns>
private DataSet GetExcelData(string strFilePath)
{
try
{
//獲取連接字串
string strConn = GetOleDbConnectionString(strFilePath);
DataSet ds = new DataSet();
using (OleDbConnection conn = new OleDbConnection(strConn))
{
//打開連接
conn.Open();
System.Data.DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
// 取得Excel作業簿中所有作業表
System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
OleDbDataAdapter sqlada = new OleDbDataAdapter();
foreach (DataRow dr in schemaTable.Rows)
{
try
{
string strSql = "Select * From [" + dr[2].ToString().Trim() + "]";
if (strSql.Contains("$"))
{
OleDbCommand objCmd = new OleDbCommand(strSql, conn);
sqlada.SelectCommand = objCmd;
sqlada.Fill(ds, dr[2].ToString().Trim());
}
}
catch { }
}
//關閉連接
conn.Close();
}
return ds;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 唯一需要注意的是,如果目標機器的作業系統,是64位的話。
/// 專案需要 編譯為 x86,而不是簡單的使用默認的 Any CPU.
/// </summary>
/// <param name="strExcelFileName"></param>
/// <returns></returns>
private string GetOleDbConnectionString(string strExcelFileName)
{
// Office 2007 以及 以下版本使用.
string strJETConnString =
String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", strExcelFileName);
// xlsx 擴展名 使用.
string strASEConnXlsxString =
String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"", strExcelFileName);
// xls 擴展名 使用.
string strACEConnXlsString =
String.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=\"Excel 8.0;HDR=YES\"", strExcelFileName);
//其他
string strOtherConnXlsString =
String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;HDR=Yes;IMEX=1;'", strExcelFileName);
//嘗試使用 ACE. 假如不發生錯誤的話,使用 ACE 驅動.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(strACEConnXlsString);
cn.Open();
cn.Close();
// 使用 ACE
return strACEConnXlsString;
}
catch (Exception)
{
// 啟動 ACE 失敗.
}
// 嘗試使用 Jet. 假如不發生錯誤的話,使用 Jet 驅動.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(strJETConnString);
cn.Open();
cn.Close();
// 使用 Jet
return strJETConnString;
}
catch (Exception)
{
// 啟動 Jet 失敗.
}
// 嘗試使用 Jet. 假如不發生錯誤的話,使用 Jet 驅動.
try
{
System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(strASEConnXlsxString);
cn.Open();
cn.Close();
// 使用 Jet
return strASEConnXlsxString;
}
catch (Exception)
{
// 啟動 Jet 失敗.
}
// 假如 ACE 與 JET 都失敗了,默認使用 JET.
return strOtherConnXlsString;
}
uj5u.com熱心網友回復:
有部分忘記寫了 btnImport_Click方法里面驗證好檔案型別是Excel后,獲取到檔案的路徑,再呼叫GetExcelData方法將Execl內容轉換成DataSet,。最后對DataSet內的資料做操作.....
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/110474.html
標籤:VC.NET
