获取多个Excel中的Sheet,该如何解决
获取多个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
------解决思路----------------------
http://blog.****.net/rui_china/article/details/10405069
------解决思路----------------------
多个和1个有任何区别?循环一下呗
不管你是用任何方式访问文件
------解决思路----------------------
它是专门处理Excel的组件,你百度一下相关的DEMO你就懂了。读取写入,都没问题。
------解决思路----------------------
索引是从0开始的
------解决思路----------------------
放弃OFFICE.EXCEL.DLL吧
问题太多,不一一列举了
你应该用一些不依赖系统环境的组件
------解决思路----------------------
一个一个生成,一个一个填充,就是个for循环搞定的问题
------解决思路----------------------
建议用NPOI
------解决思路----------------------
NPOI, 就是遍历那个sheets的集合, 遍历的同时写入..
------解决思路----------------------
Aspose.Cell 读取Excel的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();
}
}
------解决思路----------------------
什么不行 你说清楚点 你引用Aspose.Cells.dll了?
------解决思路----------------------
我这个也是WinForm的啊。具体的语句可能要改一下。例如下面这句最后面改成这样看看。
Microsoft.Office.Interop.Excel.Worksheet worksheet2 = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.getitem(2);
------解决思路----------------------
最早弄excel我也是用office的com组件的,后来客户嫌麻烦,哪个机器用就要装office。现在我用eeplus搞excel,表示比com组件简单多了。
------解决思路----------------------
使用access数据库表方式解决,很方便
------解决思路----------------------
不会吧,这么怪异。该不会你生成的Excel就只有一个页面吧??
我这段代码是公司一直在用的报表程式中的,可以用的啊。
------解决思路----------------------
生成完先不要填充数据,直接保存为文件,看里面到底有几个工作簿
如果只有1个,那么你应该在代码里新建工作簿,而不是直接去获取.
------解决思路----------------------
从上看下来之后,我建议楼主再仔细检查检查自己的东西,上面大家说的基本都对
------解决思路----------------------
------解决思路----------------------
问题描述啊,描述啊,描述啊,描述啊。。。。
这 都是练的筋斗云么?!
在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
------解决思路----------------------
http://blog.****.net/rui_china/article/details/10405069
------解决思路----------------------
多个和1个有任何区别?循环一下呗
不管你是用任何方式访问文件
------解决思路----------------------
它是专门处理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);
------解决思路----------------------
读取都有了 添加直接 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();
}
}
------解决思路----------------------
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了?
------解决思路----------------------
试试下面这个: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数据库表方式解决,很方便
------解决思路----------------------
试试下面这个: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
}
}
------解决思路----------------------
问题描述啊,描述啊,描述啊,描述啊。。。。
这 都是练的筋斗云么?!