Вопрос по c#, .net – Нужно ли устанавливать Microsoft Office на сервере для импорта в Excel в Asp.net?

5

Нужно ли устанавливать Microsoft Office на сервере, чтобы запустить приложение для импорта данных из файла Excel в базу данных mssql?

какие-либо предложения или идеи?

код, который я использовал

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();
}
}
Это то, что вы пытаетесь автоматизировать, или просто делаете это один раз? Если вы делаете это только один раз, сохраните файл Excel как CSV, а затем импортируйте его в SQL с помощью BCP. vcsjones

Ваш Ответ

3   ответа
8

Microsoft.Jet.OLEDB.4.0 это встроено в ваш .net Framework.

Если вы читаете файлы xlsx, используйтеMicrosoft.ACE.OLEDB.12.0, Драйверы для этого можно скачать бесплатно с сайта Microsoft. Вам не нужно устанавливать сотрудника Microsoft для взаимодействия.

Используйте следующую строку подключения

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

Скачать драйверы отсюда

См. Это для запуска примера

0

заключается в том, что вам все еще нужно установить провайдер данных для него (хотя это также бесплатно) или установить офис для его работы. Если вам просто нужно прочитать файл 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);
            }
        }
    }
}
2

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();
}

Похожие вопросы