根据条件读取excel文件以c# Windows形式打印
本文关键字:Windows 式打印 文件 条件 读取 excel | 更新日期: 2023-09-27 18:06:19
如果我的excel文件中有以下数据,请注意它可能有也可能没有从A-Z列的数据
A B C
1 1 97 testing
2 5 102 test
3 8 42 tessst
在c# windows表单上有一个单独的测试框,提示用户输入行号,如果他们输入1
的行号,那么它必须只返回那一行。
what I attempt
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);
}
}
}
}