还有就是Excel.Application xApp=new Excel.ApplicationClass(); ,但是怎么导入using Excel包呢?
13 个解决方案
#1
上面那种将 EXCEL 文件当成数据库连接后, 找出所有表的功能, 每个SHEET就是一个表, 但是其他的也可能是表.
下面是按照EXCEL本身的方式来操作, 引入 Microsoft.Office.Interop.Excel 后可用.
下面是按照EXCEL本身的方式来操作, 引入 Microsoft.Office.Interop.Excel 后可用.
#2
/// <summary>
/// 获取Excel表格中所有表格名字
/// </summary>
/// <param name="path">表格路径</param>
/// <returns></returns>
public string[] GetExcelSheetNames(string path)
{
//1.定义Excel Application对象
Microsoft.Office.Interop.Excel.Application Excel_App = new Microsoft.Office.Interop.Excel.Application();
//2.定义Workbook工作簿集合对象
Microsoft.Office.Interop.Excel.Workbooks Excel_workbooks;
//3.定义Excel workbook工作簿对象
Microsoft.Office.Interop.Excel.Workbook Excel_workbook;
//4.定义Workbook工作表对象
//Microsoft.Office.Interop.Excel.Worksheet Excel_worksheet;
try
{
Excel_workbooks = Excel_App.Workbooks;
Excel_workbook = Excel_workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Excel_App.Visible = false;
string[] names = new string[Excel_workbook.Worksheets.Count];
for (int i = 0; i < Excel_workbook.Worksheets.Count; i++)
{
names[i] = ((Microsoft.Office.Interop.Excel.Worksheet)Excel_workbook.Worksheets[i + 1]).Name;
}
Excel_App.ActiveWorkbook.Close(); //关闭当前活动的WorkBook
Excel_App.Quit();//退出excel应用程序
return names;
}
catch
{
Excel_App.ActiveWorkbook.Close();
Excel_App.Quit();
DevExpress.XtraEditors.XtraMessageBox.Show("获取工作表名失败!", "提示");
return null;
}
}
#3
一,返回的DataTable中有一个TABLE_NAME列,里面放的是表名。
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["TABLE_NAME"].ToString());
}
二,引用:Microsoft.Office.Interop.Excel
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["TABLE_NAME"].ToString());
}
二,引用:Microsoft.Office.Interop.Excel
#4
Oledb的话,每个sheet是一个表
#5
具体要怎么引用office的那个包?直接using不行8
#6
在VS的菜单:项目->添加引用,在弹出的对话框里找。
using其实只是让你写代码时不用把命名空间带上,并不会帮你引用类库。
using其实只是让你写代码时不用把命名空间带上,并不会帮你引用类库。
#7
首先,一般我们玩xls都用npoi...而不是用自带的组件..
如果你用NPOI获取sheet以及读取sheet就非常简单了..
上面方法表示 当前xls里面有多少个sheet.
然后获取每个sheet就用下面一句话就搞定了.
其中参数表示索引...想获取哪个写哪个...
如果你用NPOI获取sheet以及读取sheet就非常简单了..
HSSFWorkbook.NumberOfSheets
上面方法表示 当前xls里面有多少个sheet.
然后获取每个sheet就用下面一句话就搞定了.
ISheet sheet = hssfworkbook.GetSheetAt(0);
其中参数表示索引...想获取哪个写哪个...
#8
我前段时间做上传excel的时候用到了
DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
但是没有用到Excel.Application xApp=new Excel.ApplicationClass();
我是这样做的:
我是在前台放了一个FileUpload和button控件,在后台通过按钮事件,将excel上传到服务器上。
再用DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });读取整个excel。
我为了找到dataTabel 中哪个字段才是存放sheet表名称的。所以用下面这句输出语句。
Response.Write(dataTabel.Columns[0].ColumnName + "&" + dataTabel.Columns[1].ColumnName + "&" + dataTabel.Columns[2].ColumnName + "&" + dataTabel.Columns[3].ColumnName + "&" + dataTabel.Columns[4].ColumnName + "&" + dataTabel.Columns[5].ColumnName + "&" + dataTabel.Columns[6].ColumnName + "&" + dataTabel.Columns[7].ColumnName + "&" + dataTabel.Columns[8].ColumnName);
发现dataTabel.Columns[2].ColumnName字段名叫TABLE_NAME。是sheet表名称。你可以通过这个字段去遍历。
DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
但是没有用到Excel.Application xApp=new Excel.ApplicationClass();
我是这样做的:
我是在前台放了一个FileUpload和button控件,在后台通过按钮事件,将excel上传到服务器上。
再用DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });读取整个excel。
我为了找到dataTabel 中哪个字段才是存放sheet表名称的。所以用下面这句输出语句。
Response.Write(dataTabel.Columns[0].ColumnName + "&" + dataTabel.Columns[1].ColumnName + "&" + dataTabel.Columns[2].ColumnName + "&" + dataTabel.Columns[3].ColumnName + "&" + dataTabel.Columns[4].ColumnName + "&" + dataTabel.Columns[5].ColumnName + "&" + dataTabel.Columns[6].ColumnName + "&" + dataTabel.Columns[7].ColumnName + "&" + dataTabel.Columns[8].ColumnName);
发现dataTabel.Columns[2].ColumnName字段名叫TABLE_NAME。是sheet表名称。你可以通过这个字段去遍历。
#9
怎么才能用npoi呢?没接触过。。。
#10
多谢,现在去试试,,,,,
#11
没那么复杂,excel可以看作一个sql数据库,sheet可以看作是这个数据库的表。这样,问题变成了:获取数据库中各个表名,然后循环对每个表进行操作
先自己试着解决问题,不行再问
先自己试着解决问题,不行再问
#12
将excel表看成是OLEDB数据库库
#13
原来worksheet的索引是从1开始的啊,我说sheets【0】不行呢
#1
上面那种将 EXCEL 文件当成数据库连接后, 找出所有表的功能, 每个SHEET就是一个表, 但是其他的也可能是表.
下面是按照EXCEL本身的方式来操作, 引入 Microsoft.Office.Interop.Excel 后可用.
下面是按照EXCEL本身的方式来操作, 引入 Microsoft.Office.Interop.Excel 后可用.
#2
/// <summary>
/// 获取Excel表格中所有表格名字
/// </summary>
/// <param name="path">表格路径</param>
/// <returns></returns>
public string[] GetExcelSheetNames(string path)
{
//1.定义Excel Application对象
Microsoft.Office.Interop.Excel.Application Excel_App = new Microsoft.Office.Interop.Excel.Application();
//2.定义Workbook工作簿集合对象
Microsoft.Office.Interop.Excel.Workbooks Excel_workbooks;
//3.定义Excel workbook工作簿对象
Microsoft.Office.Interop.Excel.Workbook Excel_workbook;
//4.定义Workbook工作表对象
//Microsoft.Office.Interop.Excel.Worksheet Excel_worksheet;
try
{
Excel_workbooks = Excel_App.Workbooks;
Excel_workbook = Excel_workbooks.Open(path, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Excel_App.Visible = false;
string[] names = new string[Excel_workbook.Worksheets.Count];
for (int i = 0; i < Excel_workbook.Worksheets.Count; i++)
{
names[i] = ((Microsoft.Office.Interop.Excel.Worksheet)Excel_workbook.Worksheets[i + 1]).Name;
}
Excel_App.ActiveWorkbook.Close(); //关闭当前活动的WorkBook
Excel_App.Quit();//退出excel应用程序
return names;
}
catch
{
Excel_App.ActiveWorkbook.Close();
Excel_App.Quit();
DevExpress.XtraEditors.XtraMessageBox.Show("获取工作表名失败!", "提示");
return null;
}
}
#3
一,返回的DataTable中有一个TABLE_NAME列,里面放的是表名。
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["TABLE_NAME"].ToString());
}
二,引用:Microsoft.Office.Interop.Excel
foreach (DataRow dr in dt.Rows)
{
Console.WriteLine(dr["TABLE_NAME"].ToString());
}
二,引用:Microsoft.Office.Interop.Excel
#4
Oledb的话,每个sheet是一个表
#5
具体要怎么引用office的那个包?直接using不行8
#6
在VS的菜单:项目->添加引用,在弹出的对话框里找。
using其实只是让你写代码时不用把命名空间带上,并不会帮你引用类库。
using其实只是让你写代码时不用把命名空间带上,并不会帮你引用类库。
#7
首先,一般我们玩xls都用npoi...而不是用自带的组件..
如果你用NPOI获取sheet以及读取sheet就非常简单了..
上面方法表示 当前xls里面有多少个sheet.
然后获取每个sheet就用下面一句话就搞定了.
其中参数表示索引...想获取哪个写哪个...
如果你用NPOI获取sheet以及读取sheet就非常简单了..
HSSFWorkbook.NumberOfSheets
上面方法表示 当前xls里面有多少个sheet.
然后获取每个sheet就用下面一句话就搞定了.
ISheet sheet = hssfworkbook.GetSheetAt(0);
其中参数表示索引...想获取哪个写哪个...
#8
我前段时间做上传excel的时候用到了
DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
但是没有用到Excel.Application xApp=new Excel.ApplicationClass();
我是这样做的:
我是在前台放了一个FileUpload和button控件,在后台通过按钮事件,将excel上传到服务器上。
再用DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });读取整个excel。
我为了找到dataTabel 中哪个字段才是存放sheet表名称的。所以用下面这句输出语句。
Response.Write(dataTabel.Columns[0].ColumnName + "&" + dataTabel.Columns[1].ColumnName + "&" + dataTabel.Columns[2].ColumnName + "&" + dataTabel.Columns[3].ColumnName + "&" + dataTabel.Columns[4].ColumnName + "&" + dataTabel.Columns[5].ColumnName + "&" + dataTabel.Columns[6].ColumnName + "&" + dataTabel.Columns[7].ColumnName + "&" + dataTabel.Columns[8].ColumnName);
发现dataTabel.Columns[2].ColumnName字段名叫TABLE_NAME。是sheet表名称。你可以通过这个字段去遍历。
DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
但是没有用到Excel.Application xApp=new Excel.ApplicationClass();
我是这样做的:
我是在前台放了一个FileUpload和button控件,在后台通过按钮事件,将excel上传到服务器上。
再用DataTable dataTabel = Conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });读取整个excel。
我为了找到dataTabel 中哪个字段才是存放sheet表名称的。所以用下面这句输出语句。
Response.Write(dataTabel.Columns[0].ColumnName + "&" + dataTabel.Columns[1].ColumnName + "&" + dataTabel.Columns[2].ColumnName + "&" + dataTabel.Columns[3].ColumnName + "&" + dataTabel.Columns[4].ColumnName + "&" + dataTabel.Columns[5].ColumnName + "&" + dataTabel.Columns[6].ColumnName + "&" + dataTabel.Columns[7].ColumnName + "&" + dataTabel.Columns[8].ColumnName);
发现dataTabel.Columns[2].ColumnName字段名叫TABLE_NAME。是sheet表名称。你可以通过这个字段去遍历。
#9
怎么才能用npoi呢?没接触过。。。
#10
多谢,现在去试试,,,,,
#11
没那么复杂,excel可以看作一个sql数据库,sheet可以看作是这个数据库的表。这样,问题变成了:获取数据库中各个表名,然后循环对每个表进行操作
先自己试着解决问题,不行再问
先自己试着解决问题,不行再问
#12
将excel表看成是OLEDB数据库库
#13
原来worksheet的索引是从1开始的啊,我说sheets【0】不行呢