问题如下: 我需要在Web页面显示Excel的WorkSheet(eg: 在Excel中有1,2,3 三个WorkSheet).在Web页面中我也需要显示这三个WorkSheet,并且顺序不能错.不能是1,3,2什么的. 我使用OleDB读取Excel信息,并且通过GetOleDbSchemaTable方法读取了表名信息,但是遗憾的是,改方法返回的数据中,WorkSheet的排列已经乱了(在返回的信息中,第二条数据未必就是2这个WorkSheet了). 还有什么方法可以解决这个问题吗?
解决方案 »
- .net 初始化值 该怎么写?
- 如何让 DataGridView单元格赋值 和 手动输入 效果相同 ?
- ListBox有个属性MultiColumn可以显示多列,但怎样指定显示列的数量,比如显示为两列或三列
- 跪求解决DATAGRID导出数据到EXCEL
- 欢迎兄弟姐妹前来挑战自己
- 关于GDI+世界坐标系变换的问题
- Socket编程代码有点问题求大神指点多谢
- 关于CrystalReport10安装的问题
- 在Mdi窗体中,子窗体中的控件如何才能改变父窗体中的控件???
- winform设计器打不开,提示“尚未初始化设计器加载程序”
- ★多个系统, 如何【单点登录】的问题
- 怎样让session过期时自动跳转到登陆页
为什么要用数据库呢,你用数据库连接后SHEET的顺序肯定就乱了
我用过WEBBROWSER控件来显示EXCEL的内容,非常方便
如果不行,楼主也可以参考以下代码,或者循环取objSheet的值1,首先添加excel引用,不添加excel引用不行!
2,代码:
// Start a new workbook in Excel.
objExcel = new Excel.Application();
objBooks = (Excel.Workbooks)objExcel.Workbooks;
objBook = (Excel._Workbook)(objBooks.Add(objOpt)); //Add data to cells of the first worksheet in the new workbook.
objSheets = (Excel.Sheets)objBook.Worksheets;
//以下得到所有的表名
string[] strTable = new string[objBook.Worksheets.Count];
for(int i=0;i<objBook.Worksheets.Count;i++)
{
strTable[i] = ((Excel._Worksheet)(objSheets.get_Item(i))).Name;
}
//以下对第一张表进行操作
objSheet = (Excel._Worksheet)(objSheets.get_Item(1));
objRange = objSheet.get_Range("A1", objOpt);
objRange.set_Value(objOpt,"Last Name");
objRange = objSheet.get_Range("B1", objOpt);
objRange.set_Value(objOpt,"First Name");
objRange = objSheet.get_Range("A2", objOpt);
objRange.set_Value(objOpt,"shao");
objRange = objSheet.get_Range("B2", objOpt);
objRange.set_Value(objOpt,"zhidong"); // Apply bold to cells A1:B1.
objRange = objSheet.get_Range("A1", "B1");
objFont = objRange.Font;
objFont.Bold=true; // 以下修改第二张表
objSheet = (Excel._Worksheet)(objSheets.get_Item(2));
objRange = objSheet.get_Range("A1", objOpt);
objRange.set_Value(objOpt,"姓名");
objRange = objSheet.get_Range("B1", objOpt);
objRange.set_Value(objOpt,"地址");
objRange = objSheet.get_Range("A2", objOpt);
objRange.set_Value(objOpt,"校长");
objRange = objSheet.get_Range("B2", objOpt);
objRange.set_Value(objOpt,"中国北京海淀");
//合并单元格
//假定要合并excel文件中第2行的1~3列,并且显示黑色边框
Excel.Range rangesummary = objSheet.get_Range(objSheet.Cells[2,1],objSheet.Cells[2,3]);
rangesummary.Value2 = Type.Missing; //必须的!由于excel本身的设计中考虑了与用户的交互,当此range中有值时,会弹出对话框。所以为了防止这种事情发生,应当清空值
rangesummary.Merge(Type.Missing);
rangesummary.Value2 = "小计:";
rangesummary.Borders.Color = 0;
rangesummary.Borders.Weight=2; // Save the workbook and quit Excel.
objBook.SaveAs(strSampleFolder + "Book1.xls", objOpt, objOpt,
objOpt, objOpt, objOpt, Excel.XlSaveAsAccessMode.xlNoChange,
objOpt, objOpt, objOpt, objOpt, objOpt);
objBook.Close(false, objOpt, objOpt);
objExcel.Quit();
//以下释放excel进程
System.Runtime.InteropServices.Marshal.ReleaseComObject(objBook);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objBooks);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheets);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objExcel);
System.Runtime.InteropServices.Marshal.ReleaseComObject(objRange);
objBook = null;
objBooks = null;
objSheets=null;
objSheet=null;
objExcel=null;
objRange=null; //把操作Excel文件用到的对象实例全部释放。
//然后资源回收!
GC.Collect();
Myexcel.Worksheets(1).name
Myexcel.Worksheets(2).name
Myexcel.Worksheets(3).name
我就是这样得到三个表的名字的