How do I get an entire column in used range?

为君一笑 提交于 2019-11-27 06:41:25

问题


I am trying to get a column, but limiting it to used range...

public static Excel.Application App = new Excel.Application();
public static Excel.Workbook WB;

WB = App.Workbooks.Open("xxx.xls", ReadOnly: true);

var sheet = (WB.Sheets[1] as Excel.Worksheet);

// returns 65536 rows, I want only 82 (used range)
sheet.get_Range("F:F");

sheet.UsedRange.get_Range("F:F").Rows.Count; // 65536

How can I get it?


回答1:


You can use

sheet.UsedRange.Columns[6, Type.Missing].Rows.Count

or this

sheet.UsedRange.Columns["F:F", Type.Missing].Rows.Count



回答2:


Sounds like you want the Application.Intersect of the UsedRange and Column("F:F")




回答3:


this is the optimized way to read an Excel file column by column (or row by row) :

static void ReadExcelFile(filename) {
   Excel.Application xlApp = new Excel.Application();
   Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(filename, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
   Excel.Worksheet xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); // 1st sheet
   // the entire table :
   Excel.Range range = xlWorkSheet.UsedRange; // range.Rows.Count, range.Columns.Count

   for (int col = 1; col <= range.Columns.Count; col++) {
        // this line does only one COM interop call for the whole column
        object[,] currentColumn = (object[,])range.Columns[col, Type.Missing].Value; 
        double sum = 0;
        for (int i = 1; i < currentColumn.Length; i++) {
             object val = currentColumn[i, 1];
             sum += (double)val; // only if you know that the values are numbers 
             // if it was a string column :
             //Console.WriteLine("{0}",(string)val);
        }
    }
}


来源:https://stackoverflow.com/questions/5411355/how-do-i-get-an-entire-column-in-used-range

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!