上传Excel文件(不同版本的) 怎样上传Excel文件(不同版本的) 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 问的问题 本身就有问题 你说你还来问问题.上传只是文件 如果不去特意做校验,服务器会关心你上传的文件是exe rar xls xlsx ppt jpg rmvb吗? 显然不会..所以你问的问题 是不是"读取不同的excel" 文件啊?那请看 http://bbs.csdn.net/topics/390830774这是针对不同版本的excel进行读取.但是首先还是要上传的. 如果真的像你说的 你连上传都不会.. 那我也没办法了.. 和版本没关,反正都是二进制文件。上传的方法google下就有 上传文件很多插件都可以完成(你也可以自己写),比如AjaxFileUpload:http://www.cnblogs.com/kissdodog/archive/2012/12/15/2819025.html,自己去研究 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; } 不要在这里误导人家,人家只是上传你这是怎么生成excel 上传excel,读取excel,百度一大片。 亲,使用NPOI啊,这都不是事 一种是NPOI,上面大神们都说了,还有一种,上传后用oledb读取数据,再做转换,不过要装mdac,而且还要注意版本 苦脑中,从客户端检测到有潜在危险的Request.Form值,搞不定啊 为什么ASPX文件用IE打开后是源代码而不是页面的效果? asp.net state service无法自动启动? 在网站中积分问题 buttonclick 解释两行代码 如何转换图片文件的格式? 我的起始页的打开现有项目为什么有一个项目的修改时间总是不变化了? 在检查用户名是否会重复时,输入存在与数据库里的用户,有些能检测到,有些检测不到。这是什么原因??? 微软Office组件调用的奇怪问题,真诚求大神解答 请教各位大神,asp网站没有空间账号密码是不是不能更改网站内容 net 表格录入数据的问题
上传只是文件 如果不去特意做校验,服务器会关心你上传的文件是exe rar xls xlsx ppt jpg rmvb吗? 显然不会..
所以你问的问题 是不是"读取不同的excel" 文件啊?那请看 http://bbs.csdn.net/topics/390830774这是针对不同版本的excel进行读取.但是首先还是要上传的. 如果真的像你说的 你连上传都不会.. 那我也没办法了..
/// <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;
}
不要在这里误导人家,人家只是上传你这是怎么生成excel