繁体   English   中英

根据条件读取Excel文件以c#Windows形式打印

[英]reading excel file to print in c# windows form based on a condition

如果我的excel文件中包含以下数据,请注意,它可能有也可能没有AZ列中的数据

  A     B      C
1 1     97     testing
2 5     102    test
3 8     42     tessst

在ac#Windows窗体上,只有一个测试框提示用户输入行号,如果他们输入的行号为1则它只能带回该行。

我尝试过的

private void btnGetRow_Click(object sender, EventArgs e)
{
    var RowNumber =  txtRowNumber.Text;
    var path = "C:\\Book1.xlsx;";          

    if (txtRowNumber.Text == string.Empty || Convert.ToInt32(RowNumber) == 0)
    {
        MessageBox.Show("Please enter a digit > 0 ");
    }
    else
    {
        string con = " Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";
        using (OleDbConnection connection = new OleDbConnection(con))
        {
            connection.Open();
            OleDbCommand command = new OleDbCommand("select * from [Product$] where F1=Rownumber ", connection); // hear it must filter from the textbox,which it doesnt do so,it gives an error 
           using (OleDbDataReader dr = command.ExecuteReader())
            {
                while (dr.Read())
               {
                  //here im not sure how to get the columns from A-Z
                  //send data to the printer
                }
            }

        }

        Console.WriteLine(RowNumber);
    }
}

考虑改为使用OpenXML SDK 通过此访问XLSX工作表非常简单:通过此简单的代码片段,您可以获取电子表格行并获取其单元格值:

    private void GetValues()
    {
        OpenFileDialog fd = new OpenFileDialog();
        fd.ShowDialog();
        var x = fd.FileName;

        using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(x, true))
        {
            WorkbookPart workbookPart = myDoc.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
            SheetData sheetData =
            worksheetPart.Worksheet.Elements<SheetData>().First();
            var row = sheetData.Elements<Row>().ToArray()[1];

            foreach (Cell c in row.Elements<Cell>())
            {
               MessageBox.Show(c.CellValue.Text);
            }
        }
    }

编辑:如果您的单元格包含非数字值,您必须从SharedStringTable获取值,请看一下答案。 然后,您的代码必须如下所示:

    private void GetNonNumericValues()
    {
        OpenFileDialog fd = new OpenFileDialog();
        fd.ShowDialog();
        var x = fd.FileName;

        using (SpreadsheetDocument myDoc = SpreadsheetDocument.Open(x, true))
        {
            SharedStringTable sharedStringTable = myDoc.WorkbookPart.SharedStringTablePart.SharedStringTable;
            WorkbookPart workbookPart = myDoc.WorkbookPart;
            WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
            SheetData sheetData =
            worksheetPart.Worksheet.Elements<SheetData>().First();
            var row = sheetData.Elements<Row>().ToArray()[0];

            foreach (Cell c in row.Elements<Cell>())
            {
                if (c.DataType == CellValues.SharedString)
                {
                    var cellValue = c.InnerText;
                    MessageBox.Show(sharedStringTable.ElementAt(Int32.Parse(cellValue)).InnerText);
                }
            }
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM