excel 无法在C#中使用cntRow和cntCln

eqqqjvef  于 2022-12-14  发布在  C#
关注(0)|答案(1)|浏览(166)
public static void OpenFile()
    {
        
        Excel excel = new Excel(@"Testblatt.xlsx",1);
        
        for (int i = 0; i < Excel.cntRow; i++) 
        {
            for (int j = 0; j < Excel.cntCln; j++)
            {
               excel.ReadCell(i,j);
                MessageBox.Show(excel.ReadCell(i, j));
            }
        }
        excel.wb.Close();
            
    }

在顶部的代码中,您可以看到cntRow和cntCln,它们应该是Excel电子表格中使用的最大行数和列数,IDE告诉我这些变量现在还没有实现。下面的代码是完整的类,您可以在其中看到我是如何实现它的。我只是一个初学者,所以请不要对我太苛刻。

internal class Excel
{
    string path = "";
    _Application excel = new _Excel.Application();
    Workbook wb;
    Worksheet ws;


    public Excel(string path, int Sheet)
    {
        this.path = path;
        this.wb = excel.Workbooks.Open(path);
        this.ws = wb.Worksheets[Sheet];
        Range usedRange = ws.UsedRange;
        int cntRow = usedRange.Rows.Count;
        int cntCln = usedRange.Columns.Count;

    }

    public string ReadCell(int i, int j)
    {
        i++;
        j++;
        if (ws.Cells[i,j].Value2 != null) 
            return Convert.ToString(ws.Cells[i,j].Value);
        else
            return "";
    }

    //lese festgelegte Exceldatei komplett
     public static void OpenFile()
    {
        
        Excel excel = new Excel(@"Testblatt.xlsx",1);
        
        for (int i = 0; i < Excel.cntRow; i++) 
        {
            for (int j = 0; j < Excel.cntCln; j++)
            {
               excel.ReadCell(i,j);
                MessageBox.Show(excel.ReadCell(i, j));
            }
        }
        excel.wb.Close();
            
    }

    public static void ConView()
    {
        OpenFile();
    
    }
    

   
}
thtygnil

thtygnil1#

你做错了两件事。首先,Excel是你的类的名字,你的示例叫做excel,这是你需要使用的。其次,你没有发布cntCln和cntRow的属性,所以它们在你的类之外是不可见的。
按如下方式更改类:

internal class Excel
{
    string path = "";
    _Application excel = new _Excel.Application();
    Workbook wb;
    Worksheet ws;
    private int cntRow;
    private int cntCln;

    public Excel(string path, int Sheet)
    {
        this.path = path;
        this.wb = excel.Workbooks.Open(path);
        this.ws = wb.Worksheets[Sheet];
        Range usedRange = ws.UsedRange;
        cntRow = usedRange.Rows.Count;
        cntCln = usedRange.Columns.Count;
   }

public int CntCln => cntCln;
public int CntRow => cntRow;

...

并像这样使用它:

public static void OpenFile()
{
    Excel excel = new Excel(@"Testblatt.xlsx",1);
        
    for (int i = 0; i < excel.CntRow; i++) 
    {
       for (int j = 0; j < excel.CntCln; j++)
       {
           excel.ReadCell(i,j);
           MessageBox.Show(excel.ReadCell(i, j));
       }
    }
    excel.wb.Close();
}

FORTRAN76的时代已经一去不复返了。您可以使用6个以上的字符作为变量名。实际上,从长远来看,将属性命名为RowCount和ColumnCount比命名为CntRow和CntCln要好得多。

相关问题