Чтобы прочитать файл Excel с ASP.Net Excel должен быть установлен на сервере? - PullRequest
1 голос
/ 29 марта 2012

Я читаю файл Excel из ASP: NET MVC на localhost без проблем.Но при публикации сайта по ошибке.На сервере не установлен офис или какая-либо библиотека Excel.Может ли это быть проблемой?Или это может быть ??Спасибо за ваши ответы

* Не используйте никакие библиотеки, прочитайте файл Excel через соединение OleDbConnection.Мой код следующий:

//the error occurs here, but only published on the website:
strConex = ConfigurationManager.ConnectionStrings["Excel03ConString"].ConnectionString;
/**strConex = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:copia.xlsx;
                     Extended Properties='Excel 12.0;HDR=YES;'"**/

OleDbConnection connection = new OleDbConnection(strConex);
        OleDbCommand command = new OleDbCommand();
        OleDbDataAdapter adapter = new OleDbDataAdapter();            

        command.Connection = connection;
        connection.Open();
        DataTable dtschema = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
        String nameSheet = dtschema.Rows[0]["TABLE_NAME"].ToString();
        connection.Close();

        connection.Open();
        command.CommandText = "SELECT * From [" + nameSheet + "]";
        adapter.SelectCommand = command;
        adapter.Fill(dt);
        connection.Close();

Результат в следующем исключении:

   System.NullReferenceException: Object reference not set to an instance of an object.     at BusinessServices.RetentionAgentService.CreateRetentionsByAgentExcel(String path, String idcard, String user, DataTable dtError, DateTime initialDate, DateTime endDate, Guid& masterId) in C:\Corp\PublicAriManagua\BusinessServices\RetentionAgent\RetentionAgentService.cs:line 342     at PublicARI.Controllers.AgentRetentionController.SaveRetentions(HttpPostedFileBase file, RetentionAgentDeclaration retAgent) in C:\Corp\PublicAriManagua\PublicARI\Controllers\AgentRetentionController.cs:line 496     at lambda_method(Closure , ControllerBase , Object[] )     at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)     at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)     at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 filters, ActionDescriptor actionDescriptor, IDictionary`2 parameters)     at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

Ответы [ 2 ]

0 голосов
/ 29 марта 2012

Я использую EPPlus , это действительно хорошо, вот пример метода, который экспортирует таблицу Excel в DataTable:

/// <summary>
/// exports XLSX sheet to DataTable
/// </summary>
/// <param name="excelFile">Excel file</param>
/// <param name="sheetName">Sheet for export</param>
/// <param name="firstRowIsHeader">Excel first row is header</param>
/// <returns>DataTable with selected sheet data</returns>
private DataTable XlsxToDataTable(FileInfo excelFile, string sheetName, bool firstRowIsHeader)
{
  ExcelPackage ePack = new ExcelPackage(excelFile);
  ExcelWorksheet ws = ePack.Workbook.Worksheets[sheetName];

  DataTable result = new DataTable();

  /// header 
  for (int xx = 1; xx <= ws.Dimension.End.Column; xx++)
  {
    string data = "";        
    if (ws.Cells[1, xx].Value != null)
      data = ws.Cells[1, xx].Value.ToString();

    string columnName = firstRowIsHeader ? data : "Column" + xx.ToString();
    result.Columns.Add(columnName);
  }

  /// data 
  int first = firstRowIsHeader ? 2 : 1;
  for (int excelRow = first; excelRow <= ws.Dimension.End.Row; excelRow++)
  {
    DataRow rw = result.NewRow();
    result.Rows.Add(rw);
    for (int excelCol = 1; excelCol <= ws.Dimension.End.Column; excelCol++)
    {            
      string data = "";
      if (ws.Cells[excelRow, excelCol].Value != null)
        data = ws.Cells[excelRow, excelCol].Value.ToString();
      rw[excelCol-1] = data;
    }
  }
  return result;

}
0 голосов
/ 29 марта 2012

Просто убедитесь, что dll для чтения excel также идет в папку bin сервера.Что вы используете, чтобы прочитать кстати?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...