[英]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.