2016-03-18 4 views
0

Я пытаюсь импортировать и экспортировать Excel. Вот поток процесса. Один пользователь загружает Excel и другой пользователь, загружающий его. Excel загружается с одного веб-apllication, а затем загружены на другие веб-приложения. (Где первенствует выбран данные и выполняются различные действия)Внешняя таблица не в ожидаемом формате asp.net

код для загрузки EXCEL

HttpContext.Current.Response.Clear() 
     HttpContext.Current.Response.ClearContent() 
     HttpContext.Current.Response.ClearHeaders() 
     HttpContext.Current.Response.Buffer = True 
     HttpContext.Current.Response.ContentType = "application/ms-excel" 
     HttpContext.Current.Response.Write("<!DOCTYPE HTML PUBLIC ""-//W3C//DTD HTML 4.0 Transitional//EN"">") 
     HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=Reports.xls") 

     HttpContext.Current.Response.Charset = "utf-8" 
     HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.GetEncoding("windows-1250") 
     'sets font 
     HttpContext.Current.Response.Write("<font style='font-size:10.0pt; font-family:Calibri;'>") 
     HttpContext.Current.Response.Write("<BR><BR><BR>") 
     'sets the table border, cell spacing, border color, font of the text, background, foreground, font height 
     HttpContext.Current.Response.Write("<Table border='1' bgColor='#ffffff' " + "borderColor='#000000' cellSpacing='0' cellPadding='0' " + "style='font-size:10.0pt; font-family:Calibri; background:white;'>") 
     'am getting my grid's column headers 
     Dim columnscount As Integer = GridView_Result.Columns.Count 

     Dim Console As String = "" 
     HttpContext.Current.Response.Write("<TR>") 
     For Each column In dtEmp.Columns 
      HttpContext.Current.Response.Write("<Td>") 
      HttpContext.Current.Response.Write(column.ColumnName) 
      HttpContext.Current.Response.Write("</Td>") 
     Next 
     HttpContext.Current.Response.Write("</TR>") 
     For Each row As DataRow In dtEmp.Rows 
      'write in new row 
      HttpContext.Current.Response.Write("<TR style=background-color :#FFFFFF>") 
      For i As Integer = 0 To dtEmp.Columns.Count - 1 
       HttpContext.Current.Response.Write("<Td>") 
       HttpContext.Current.Response.Write(row(i).ToString()) 
       HttpContext.Current.Response.Write("</Td>") 
      Next 

      HttpContext.Current.Response.Write("</TR>") 
     Next 
     HttpContext.Current.Response.Write("</Table>") 
     HttpContext.Current.Response.Write("</font>") 
     HttpContext.Current.Response.Flush() 
     HttpContext.Current.Response.[End]() 

     Response.ClearContent() 

Теперь я могу скачать Excel но когда я загрузил его и попытался его прочитать, ему дали «Внешняя таблица не в ожидаемом формате», но когда я вручную создаю любое excel и пытаюсь загрузить и прочитать, что Excel, то он работает идеально, а не выдача какой-либо ошибки

Кода для чтения EXCEL

var FilePATH = Server.MapPath("~/Reports/" + "DEMO.xls"); 
      if (FileUpload1.HasFile) 
      { 
       string con = "provider=Microsoft.ACE.OLEDB.12.0;;Data Source={0};" + 
          "Extended Properties='Excel 12.0;HDR=YES;IMEX=1'"; 

       FileUpload1.SaveAs(FilePATH); 



       con = String.Format(con, FilePATH); 
       OleDbConnection connExcel = new OleDbConnection(con); 
       OleDbCommand cmdExcel = new OleDbCommand(); 
       OleDbDataAdapter oda = new OleDbDataAdapter(); 
       DataTable dt = new DataTable(); 
       cmdExcel.Connection = connExcel; 

       //Get the name of First Sheet 
       connExcel.Open(); 
       DataTable dtExcelSchema; 
       dtExcelSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
       string SheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
       connExcel.Close(); 

       //Read Data from First Sheet 
       connExcel.Open(); 
       cmdExcel.CommandText = "SELECT * From [" + SheetName + "]"; 
       oda.SelectCommand = cmdExcel; 
       oda.Fill(dt); 
       connExcel.Close(); 

И это будет хорошо, если вы предоставите мне ответить без использования какого-либо сторонний DLL и производства сервера не установлен не в офисе, и он не будет установлен в будущем. Так что я не могу использовать также вмешиваться в чужие дела

, когда я открываю скачанный первенствует и сохранили его как «EXCEL 97-2003», то эта новая первенствует работает нормально

ответ

0

Вы можете экспортировать только таблицу тегов и повторить попытку?

Если вы заполните Excel вручную, это, безусловно, в правильном формате, а экспортированный html может быть интерпретирован неправильно.

Я предлагаю использовать ClosedXml (бесплатный и открытый исходный код), даже если вы попросите не предлагать стороннюю dll

Смежные вопросы