当前位置: 代码迷 >> C# >> 获取多个Excel中的Sheet,该如何解决
  详细解决方案

获取多个Excel中的Sheet,该如何解决

热度:127   发布时间:2016-05-05 04:55:08.0
获取多个Excel中的Sheet
在C/S中,如何获取多个Excel的Sheet,且向多个sheet写入数据,并导出。
------解决思路----------------------
用Aspose.Cell 就能解决一切。

http://www.cnblogs.com/wuhuacong/archive/2011/02/23/1962147.html
http://www.cnblogs.com/wuhuacong/archive/2013/02/05/2893191.html
------解决思路----------------------
引用:
在C/S中,如何获取多个Excel的Sheet,且向多个sheet写入数据,并导出。

http://blog.csdn.net/rui_china/article/details/10405069
------解决思路----------------------
多个和1个有任何区别?循环一下呗
不管你是用任何方式访问文件
------解决思路----------------------
引用:
能安装Aspose.Cell 就解决问题吗?

它是专门处理Excel的组件,你百度一下相关的DEMO你就懂了。读取写入,都没问题。
------解决思路----------------------
索引是从0开始的
------解决思路----------------------
放弃OFFICE.EXCEL.DLL吧
问题太多,不一一列举了
你应该用一些不依赖系统环境的组件
------解决思路----------------------
一个一个生成,一个一个填充,就是个for循环搞定的问题
------解决思路----------------------
建议用NPOI
------解决思路----------------------
NPOI, 就是遍历那个sheets的集合, 遍历的同时写入..
------解决思路----------------------
Aspose.Cell 读取Excel的Sheet


 Aspose.Cells.Workbook work = new Aspose.Cells.Workbook();
            work.LoadData("C:\\excels.xls");
            for (int i = 0; i < work.Worksheets.Count; i++)
            {
                Console.WriteLine(work.Worksheets[i].Name);
                //读取数据
                // string xx  work.Worksheets[i].Cells[行,列].Value;
            }

------解决思路----------------------
试试下面这个:
                Application mExcelObj = new Application();
                Workbook theWorkbook = mExcelObj.Workbooks.Add(Type.Missing);
                Sheets sheets = theWorkbook.Worksheets;

                Worksheet ws = (Worksheet)sheets.get_Item(1);

------解决思路----------------------
引用:
Quote: 引用:

Aspose.Cell 读取Excel的Sheet


 Aspose.Cells.Workbook work = new Aspose.Cells.Workbook();
            work.LoadData("C:\\excels.xls");
            for (int i = 0; i < work.Worksheets.Count; i++)
            {
                Console.WriteLine(work.Worksheets[i].Name);
                //读取数据
                // string xx  work.Worksheets[i].Cells[行,列].Value;
            }

这是获取Excel的sheet,我现在是要创建excel的多个sheet,并将数据导入到不用的sheet中,然后导出来,这是我想要的效果。


读取都有了  添加直接 work.Worksheets.Add()就行了啊
------解决思路----------------------
给你段我在用的代码吧,初步看你的是没什么明显错误的,确认你的excel里有第二个sheet么?

对于excel这个下标都是从1开始的。

        /// <summary>
        /// 提取指定路径Excel文件的指定区域数据
        /// </summary>
        /// <param name="strFilePathName">文件全路径</param>
        /// <param name="nSheetIndex">工作表序号(从1开始)</param>
        /// <param name="strCellStart">开始单元格名(如"A1")</param>
        /// <param name="strCellEnd">结束单元格名(如"A2")</param>
        /// <param name="strValues">用于的返回数据的多维数组</param>
        /// <returns></returns>
        public static bool GetData(string strFilePathName, int nSheetIndex, string strCellStart, string strCellEnd, ref object[,] objValues)
        {
            Microsoft.Office.Interop.Excel.Application objApplication = null;
            Microsoft.Office.Interop.Excel.Workbook objWorkbook = null;
            Microsoft.Office.Interop.Excel.Sheets objSheets = null;
            Microsoft.Office.Interop.Excel.Worksheet objWorksheet = null;
            objExcel.Range objRange = null;
            try
            {
                //实例操作类 
                objApplication = new Microsoft.Office.Interop.Excel.Application();
                objApplication.DisplayAlerts = false;
                objApplication.Visible = false;
                RecordHwdn(objApplication);     //记录句柄

                //打开指定路径的Excel表 
                objWorkbook = objApplication.Workbooks.Open(strFilePathName);
                objSheets = objWorkbook.Worksheets;
                objWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)objSheets[nSheetIndex];

                //取指定区间值   
                //objExcel.Range objRange = (objExcel.Range)objWorksheet.Cells["A1", 10];
                objRange = objWorksheet.get_Range(strCellStart, strCellEnd);
                objValues = new object[objRange.Rows.Count, objRange.Columns.Count];
                objValues = (object[,])objRange.Value;

                return true;
            }
            catch (Exception Ex)
            {
                MessageBox.Show(Ex.ToString(), "错误!");
                return false;
            }
            finally
            {
                //关闭Excel文件并返回数据 
                if (objWorkbook != null)
                {
                    objWorkbook.Close();
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objWorkbook);
                }
                objWorkbook = null;
                if (objApplication != null)
                {
                    objApplication.Quit();
                    System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objApplication);
                }
                objApplication = null;

                //释放资源
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objSheets);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objWorksheet);
                System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objRange);
                objSheets = null;
                objWorksheet = null;
                objRange = null;
                SoFile.SoFileExcel.Close();
                GC.Collect();
            }
        }
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

Aspose.Cell 读取Excel的Sheet


 Aspose.Cells.Workbook work = new Aspose.Cells.Workbook();
            work.LoadData("C:\\excels.xls");
            for (int i = 0; i < work.Worksheets.Count; i++)
            {
                Console.WriteLine(work.Worksheets[i].Name);
                //读取数据
                // string xx  work.Worksheets[i].Cells[行,列].Value;
            }

这是获取Excel的sheet,我现在是要创建excel的多个sheet,并将数据导入到不用的sheet中,然后导出来,这是我想要的效果。


读取都有了  添加直接 work.Worksheets.Add()就行了啊


不行啊,生成不错!


什么不行 你说清楚点  你引用Aspose.Cells.dll了?
------解决思路----------------------
引用:
Quote: 引用:

试试下面这个:
                Application mExcelObj = new Application();
                Workbook theWorkbook = mExcelObj.Workbooks.Add(Type.Missing);
                Sheets sheets = theWorkbook.Worksheets;

                Worksheet ws = (Worksheet)sheets.get_Item(1);

不行,都生成不了,我是用winform窗体做的!


我这个也是WinForm的啊。具体的语句可能要改一下。例如下面这句最后面改成这样看看。
Microsoft.Office.Interop.Excel.Worksheet worksheet2 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.getitem(2);
------解决思路----------------------
最早弄excel我也是用office的com组件的,后来客户嫌麻烦,哪个机器用就要装office。现在我用eeplus搞excel,表示比com组件简单多了。
------解决思路----------------------
使用access数据库表方式解决,很方便
------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

试试下面这个:
                Application mExcelObj = new Application();
                Workbook theWorkbook = mExcelObj.Workbooks.Add(Type.Missing);
                Sheets sheets = theWorkbook.Worksheets;

                Worksheet ws = (Worksheet)sheets.get_Item(1);

不行,都生成不了,我是用winform窗体做的!


我这个也是WinForm的啊。具体的语句可能要改一下。例如下面这句最后面改成这样看看。
Microsoft.Office.Interop.Excel.Worksheet worksheet2 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.getitem(2);

不行啊!还是报“无效索引。 (Exception from HRESULT: 0x8002000B (DISP_E_BADINDEX))”的错


不会吧,这么怪异。该不会你生成的Excel就只有一个页面吧??
我这段代码是公司一直在用的报表程式中的,可以用的啊。
------解决思路----------------------
生成完先不要填充数据,直接保存为文件,看里面到底有几个工作簿
如果只有1个,那么你应该在代码里新建工作簿,而不是直接去获取.
------解决思路----------------------
从上看下来之后,我建议楼主再仔细检查检查自己的东西,上面大家说的基本都对
------解决思路----------------------

for(int t=0;t<10;t++)
if (t == 0)
                {
                    worksheet = (Excel.Worksheet)workbook.Sheets.get_Item(1);//获取sheet1
                }
                else
                {
                    worksheet = (Excel.Worksheet)workbook.Worksheets.Add(missing, missing, missing, missing);//添加一个sheet 
                }
}

------解决思路----------------------
问题描述啊,描述啊,描述啊,描述啊。。。。

这 都是练的筋斗云么?!
  相关解决方案