簡體   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