刚才发帖发急了,分数没给对,现增加为120分,另帖在http://community.csdn.net/Expert/topic/5204/5204974.xml?temp=.3398706本人现有代码如下 Excel.Application app = null;
Excel.Workbook book = null;
Excel.Worksheet sheet= null; string FileName="c:\\Book1.xls";
try
{
app = new Excel.Application();
app.DisplayAlerts = false;
app.Visible = false;
app.WindowState = Excel.XlWindowState.xlMinimized; book = app.Workbooks.Open(FileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
sheet = (Excel.Worksheet)book.Worksheets[1];
int a=sheet.Cells.Rows.Count;
int b=sheet.Cells.Columns.Count; }
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}这是打开C盘根目录下Book1.xls文件
然后给a付值为所打开这个excel文件的总共行
和给b付值为所打开这个excel文件的总共列但最后结果给a付值为65536
b付值为256明显是错误的不知道什么原因,各位有经验的帮忙解答一下,谢谢
另外,我要打开的就是sheet1
Excel.Workbook book = null;
Excel.Worksheet sheet= null; string FileName="c:\\Book1.xls";
try
{
app = new Excel.Application();
app.DisplayAlerts = false;
app.Visible = false;
app.WindowState = Excel.XlWindowState.xlMinimized; book = app.Workbooks.Open(FileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
sheet = (Excel.Worksheet)book.Worksheets[1];
int a=sheet.Cells.Rows.Count;
int b=sheet.Cells.Columns.Count; }
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}这是打开C盘根目录下Book1.xls文件
然后给a付值为所打开这个excel文件的总共行
和给b付值为所打开这个excel文件的总共列但最后结果给a付值为65536
b付值为256明显是错误的不知道什么原因,各位有经验的帮忙解答一下,谢谢
另外,我要打开的就是sheet1
遍历时判断整个行是否为null即可结束
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();
try
object u_range = ActiveSheet.UsedRange;
Excel.Workbook book = null;
Excel.Worksheet sheet= null; string FileName="c:\\Book1.xls";
try
{
app = new Excel.Application();
app.DisplayAlerts = false;
app.Visible = false;
app.WindowState = Excel.XlWindowState.xlMinimized; book = app.Workbooks.Open(FileName,0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, 1, 0);
sheet = (Excel.Worksheet)book.Worksheets[1];
int a=sheet.Cells.Rows.Count;
int b=sheet.Cells.Columns.Count; for (int i=0;i<a;i++)
{
for (int j=0;j<b;i++)
{
MessageBox.Show(Sheet.UsedRange.Cells(i,j));
}
} }
catch(Exception ex)
{
Console.WriteLine(ex.ToString());
}
我获得单元格内容写为Sheet.UsedRange.Cells(i,j),但报错误“Excel.Range.Cells”表示“属性”,此处应为“方法”啥意思?
int b=sheet.Columns.Count;
MessageBox.Show(pbSheet.UsedRange.Cells[i,j].ToString());程序可以运行,但抛出catch{"HRESULT 中的异常:0x800A03EC。" }
int b=sheet.Columns.Count;是获得excel的行和列不是我当前打开的EXCEL的行和列
sheet.UsedRange.Rows.Count;
sheet.UsedRange.Columns.Count;
MessageBox.Show(pbSheet.UsedRange.Cells[i,j].ToString());程序可以运行,但抛出catch{"HRESULT 中的异常:0x800A03EC。" }Cells[i,j]后只有4个属性 Equals
GetHashCode
GetType
ToString
_rang.value2;
Range range1 =xlWorksheet.get_Range("u2", "u2"); s1=range1.Value2.ToString();
这样倒是能提出值来,但要遍历所有的内容就不知道咋用了。用
while((Range)xlWorksheet.Cells[12,CntCell]!= null)
{
string a="";
CntCell = CntCell + 1;
range3=(Range)xlWorksheet.Cells[12,CntCell];
a=range3.Value2.ToString();
}
时就不行了,当没有内容时就会报错说a的类型与对象类型的不能转化。range3.value2类型是:System__ComObject
执行这句后,Excel文件会被打开。有没有只打开文件,而不显示出来,读取完数据后,再关闭文件?
从table转获取即可
楼主将App隐藏了,但是在最后应该将APP关闭,否则在内存里不断地增加Excel进程。
请教一下该怎么将进程关闭呢?