怎样上传Excel文件(不同版本的)

解决方案 »

  1.   

    问的问题 本身就有问题 你说你还来问问题.
    上传只是文件  如果不去特意做校验,服务器会关心你上传的文件是exe rar xls xlsx ppt jpg rmvb吗? 显然不会..
    所以你问的问题 是不是"读取不同的excel" 文件啊?那请看 http://bbs.csdn.net/topics/390830774这是针对不同版本的excel进行读取.但是首先还是要上传的. 如果真的像你说的 你连上传都不会.. 那我也没办法了..
      

  2.   

    和版本没关,反正都是二进制文件。上传的方法google下就有
      

  3.   

    上传文件很多插件都可以完成(你也可以自己写),比如AjaxFileUpload:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html,自己去研究
      

  4.   

    NPOI

      /// <summary>
            ///  NPOI-读取Excel所有Sheet的数据到【DataSet】
            /// </summary>
            /// <param name="filePath">Excel文件路径</param>
            /// <param name="delSourceFile">读取完成后是否删除源文件</param>
            /// <returns>返回DataSet</returns>
            public static DataSet ReadExcelToDataSet(string filePath, bool delSourceFile)
            {
                DataSet ds = new DataSet();
                using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    if (filePath.Substring(filePath.LastIndexOf(".")).ToLower() == ".xlsx")
                    {
                        #region .xlsx
                        XSSFWorkbook xssfworkbook = new XSSFWorkbook(fs);
                        ArrayList arrSheets = ReadExcelSheets(filePath); //获取表名集合
                        foreach (object sheetName in arrSheets)
                        {
                            ISheet sheet = xssfworkbook.GetSheet(sheetName.ToString());
                            DataTable dtExcelData = new DataTable(sheetName.ToString());
                            #region 表头
                            IRow header = sheet.GetRow(sheet.FirstRowNum);
                            List<int> columns = new List<int>();
                            for (int i = 0; i < header.LastCellNum; i++)
                            {
                                object obj = GetValueTypeForXLSX(header.GetCell(i) as XSSFCell);
                                if (obj == null || obj.ToString() == string.Empty)
                                {
                                    dtExcelData.Columns.Add(new DataColumn("Columns" + i.ToString()));
                                    continue;
                                }
                                else
                                {
                                    dtExcelData.Columns.Add(new DataColumn(obj.ToString()));
                                    columns.Add(i);
                                }
                            }
                            #endregion
                            #region 数据
                            for (int i = sheet.FirstRowNum + 1; i <= sheet.LastRowNum; i++)
                            {
                                DataRow dr = dtExcelData.NewRow();
                                bool hasValue = false;
                                foreach (int j in columns)
                                {
                                    if (sheet.GetRow(i).GetCell(j) == null)
                                    {
                                        dr[j] = null;
                                    }
                                    else
                                    {
                                        switch (sheet.GetRow(i).GetCell(j).CellType)
                                        {
                                            case CellType.String:
                                                string str = sheet.GetRow(i).GetCell(j).StringCellValue;
                                                if (str != null && str.Length > 0)
                                                {
                                                    dr[j] = str.ToString();
                                                }
                                                else
                                                {
                                                    dr[j] = null;
                                                }
                                                break;
                                            case CellType.Numeric:
                                                decimal de;
                                                if (decimal.TryParse(sheet.GetRow(i).GetCell(j).ToString(), out de))
                                                {
                                                    dr[j] = Convert.ToString(sheet.GetRow(i).GetCell(j).NumericCellValue);
                                                }
                                                else
                                                {
                                                    dr[j] = sheet.GetRow(i).GetCell(j).DateCellValue;//.ToString("yyyy-MM-dd HH:mm:ss")
                                                }
                                                break;
                                            case CellType.Boolean:
                                                dr[j] = Convert.ToString(sheet.GetRow(i).GetCell(j).BooleanCellValue);
                                                break;
                                            case CellType.Error:
                                                break;
                                            default:
                                                dr[j] = null;
                                                break;
                                        }
                                    }
                                    if (dr[j] != null && dr[j].ToString() != string.Empty)
                                    {
                                        hasValue = true;
                                    }
                                }
                                if (hasValue)
                                {
                                    dtExcelData.Rows.Add(dr);
                                }
                            }
                            #endregion
                            ds.Tables.Add(dtExcelData);
                        }
                        #endregion
                    }
                    else
                    {
                        #region .xls
                        HSSFWorkbook workbook = new HSSFWorkbook(fs);
                        ArrayList arrSheets = ReadExcelSheets(filePath); //获取表名集合
                        foreach (object sheetName in arrSheets)
                        {
                            ISheet sheet = workbook.GetSheet(sheetName.ToString());
                            DataTable dtExcelData = new DataTable(sheetName.ToString());
                            #region 表头
                            IRow headerRow = sheet.GetRow(0);
                            int cellCount = headerRow.LastCellNum;
                            for (int headColIndex = headerRow.FirstCellNum; headColIndex < cellCount; headColIndex++)
                            {
                                if (headerRow.GetCell(headColIndex).StringCellValue.Trim().Length > 0)
                                {
                                    DataColumn column = new DataColumn(headerRow.GetCell(headColIndex).StringCellValue);
                                    dtExcelData.Columns.Add(column);
                                }
                            }
                            #endregion
                            #region 数据
                            for (int rowIndex = (sheet.FirstRowNum + 1); rowIndex <= sheet.LastRowNum; rowIndex++)
                            {
                                IRow row = sheet.GetRow(rowIndex);
                                DataRow dataRow = dtExcelData.NewRow();
                                for (int colIndex = row.FirstCellNum; colIndex < dtExcelData.Columns.Count; colIndex++)
                                {
                                    try
                                    {
                                        if (row.GetCell(colIndex) != null)
                                        {
                                            switch (row.GetCell(colIndex).CellType)
                                            {
                                                case CellType.String:
                                                    string str = row.GetCell(colIndex).StringCellValue;
                                                    if (str != null && str.Length > 0)
                                                    {
                                                        dataRow[colIndex] = str.ToString();
                                                    }
                                                    else
                                                    {
                                                        dataRow[colIndex] = null;
                                                    }
                                                    break;
                                                case CellType.Numeric:
                                                    decimal de;
                                                    if (decimal.TryParse(row.GetCell(colIndex).ToString(), out de))
                                                    {
                                                        dataRow[colIndex] = Convert.ToString(row.GetCell(colIndex).NumericCellValue);
                                                    }
                                                    else
                                                    {
                                                        dataRow[colIndex] = row.GetCell(colIndex).DateCellValue;//.ToString("yyyy-MM-dd HH:mm:ss")
                                                    }
                                                    break;
                                                case CellType.Boolean:
                                                    dataRow[colIndex] = Convert.ToString(row.GetCell(colIndex).BooleanCellValue);
                                                    break;
                                                case CellType.Error:
                                                    break;
                                                default:
                                                    dataRow[colIndex] = null;
                                                    break;
                                            }
                                        }
                                    }
                                    catch (Exception)
                                    {
                                    }
                                }
                                dtExcelData.Rows.Add(dataRow);
                            }
                            #endregion
                            ds.Tables.Add(dtExcelData);
                        }
                        #endregion
                    }
                }
                if (delSourceFile)
                {
                    File.Delete(filePath); //读取完后删除文件
                }
                return ds;
            }
      

  5.   


    不要在这里误导人家,人家只是上传你这是怎么生成excel
      

  6.   

    上传excel,读取excel,百度一大片。
      

  7.   

    亲,使用NPOI啊,这都不是事
      

  8.   

    一种是NPOI,上面大神们都说了,还有一种,上传后用oledb读取数据,再做转换,不过要装mdac,而且还要注意版本