在Excel中循环
如何循环使用C#在Excel中的行?
像使用数据表一样循环
foreach(DataRow _dr in datatable.row) { //data }
我正试着拿到这个。 但它每列循环
foreach (Excel.Range r in usedRange) { // check condition: try { if (Convert.ToInt32(r.Value2.ToString()) == 0) { // if match, delete and shift remaining cells up: r.Delete(Excel.XlDeleteShiftDirection.xlShiftUp); break; } } catch { } }
继我的评论
当你遍历一个范围时,它总是从左到右循环,而不是从上到下(除非范围只有一列)
假设你的excel表单看起来像这样
尝试和testing
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; Namespace WindowsFormsApplication4 { public partial class Form1 : Form { Public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { Microsoft.Office.Interop.Excel.Application xlexcel; Microsoft.Office.Interop.Excel.Workbook xlWorkBook; Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; Microsoft.Office.Interop.Excel.Range xlRange; object misValue = System.Reflection.Missing.Value; xlexcel = new Excel.Application(); xlexcel.Visible = true; // Open a File xlWorkBook = xlexcel.Workbooks.Open("C:\\Book1.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); // Set Sheet 1 as the sheet you want to work with xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); xlRange = xlWorkSheet.UsedRange; for (int i = 1; i <= xlRange.Rows.Count; i++) { for (int j = 1; j <= xlRange.Columns.Count; j++) { if (xlexcel.WorksheetFunction.CountIf(xlRange.Cells[i, j], "0") > 0) { MessageBox.Show("Row " + i + " has 0"); break; } } } //Once done close and quit Excel xlWorkBook.Close(false, misValue, misValue); xlexcel.Quit(); releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlexcel); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; MessageBox.Show("Unable to release the Object " + ex.ToString()); } finally { GC.Collect(); } } } }
这是你得到的
我的坏,我混淆了你的代码块。
假设你有一个工作表叫做工作sheet
,试试这个:
foreach (var row in sheet.UsedRange.Rows) { // either put your logic here, // or look at columns if you prefer /* foreach (var cell in row.Columns) { // do something with cells } /* }