2012-05-22 12 views
5

我們是否需要在服務器上安裝Microsoft Office以運行應用程序以將數據從excel文件導入到mssql數據庫?我們是否需要在Asp.net中的Excel導入服務器中安裝Microsoft Office?

有什麼建議或意見?

的代碼,我用

public partial class _Default : System.Web.UI.Page 
{ 
private String strConnection = "Data Source=MYCBJ017550027;Initial Catalog=MySamplesDB;Integrated Security=True"; 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 
protected void btnSend_Click(object sender, EventArgs e) 
{ 
string path = fileuploadExcel.PostedFile.FileName; 
string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False"; 
OleDbConnection excelConnection =new OleDbConnection(excelConnectionString); 
OleDbCommand cmd = new OleDbCommand("Select [ID],[Name],[Designation] from [Sheet1$]",excelConnection); 
excelConnection.Open(); 
OleDbDataReader dReader; 
dReader = cmd.ExecuteReader(); 
SqlBulkCopy sqlBulk = new SqlBulkCopy(strConnection); 
sqlBulk.DestinationTableName = "Excel_table"; 
sqlBulk.WriteToServer(dReader); 
excelConnection.Close(); 
} 
} 
+0

這是你正在嘗試自動化,還是隻做一次?如果您只是一次完成此操作,請將Excel文件另存爲CSV,然後使用BCP將其導入到SQL中。 – vcsjones

回答

8

如果你正在讀只XLS文件,然後使用Microsoft.Jet.OLEDB.4.0是內置與您的.NET框架。

如果您正在閱讀xlsx文件,請使用Microsoft.ACE.OLEDB.12.0。此驅動程序可以從Microsoft網站免費下載。您無需安裝微軟官員進行互動。

使用下面的連接字符串

string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0; 
Data Source=" + path + ";Extended Properties=Excel 12.0;HDR=YES"; 

Download drivers from here

Refer this for running example

2

正如@Romil說,你可以使用了.NET Framework:

string ConnectionString = string.Format(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source={0}; Extended Properties=""Excel 8.0;HDR=Yes"";", fileName); 

using (OleDbConnection conn = new OleDbConnection(ConnectionString)) 
{ 
    conn.Open(); 
    DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); 

    foreach (DataRow schemaRow in schemaTable.Rows) 
    { 
      string sheet = schemaRow["TABLE_NAME"].ToString(); 
      using (OleDbCommand cmd = new OleDbCommand("SELECT * FROM [" + sheet + "]", conn)) 
      { 
       cmd.CommandType = CommandType.Text; 
       DataTable outputTable = new DataTable(sheet); 
       output.Tables.Add(outputTable); 
       new OleDbDataAdapter(cmd).Fill(outputTable); 
      } 
    } 
       conn.Close(); 
} 
0

與噴氣機的問題,你還需要安裝數據提供程序嗎?爲它的ider(雖然這也是免費的)或有辦公室安裝它的工作。如果你只需要閱讀一個excel文件,那裏就有大量的完全管理的庫,它們可以很好的完成這個任務,而無需安裝任何東西。

我在這裏列出了一些。我已經使用excelreader獲得了很好的結果。

http://excelreader.codeplex.com/
http://epplus.codeplex.com/

Excel的讀者似乎對事物的文檔側光。所以這裏是一個如何使用它的例子

IExcelDataReader reader = null; 
try 
{ 
    using (FileStream stream = new FileStream(ofd.FileName, FileMode.Open)) 
    { 
     string ext = System.IO.Path.GetExtension(ofd.FileName).Replace(".", "").ToUpper(); 
     if (ext == "XLS") 
      reader = ExcelReaderFactory.CreateBinaryReader(stream); 
     else 
      reader = ExcelReaderFactory.CreateOpenXmlReader(stream); 

     reader.IsFirstRowAsColumnNames = true; 
     using (DataSet ds = reader.AsDataSet()) 
     { 
      foreach (DataRow dr in ds.Tables[0].Rows) 
      { 
       ImportData toAdd = new ImportData() 
        { 
         Format = dr[0].ToString(), 
        }; 

       Database.Datastore.InsertObject(toAdd); 
      } 
     } 
    } 
} 
相關問題