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