在我的应用程序中,我需要读取一个excel文件并以表格格式显示标题(标题)。 这到目前为止工作正常。但对于一些excel文件,它显示(excel文件有20列)一些额外的列(column21,column22等)。不知道为什么它显示这些额外的列 当我检查excel文件时,它只有20列,21或22列完全为空。 不知道为什么我显示这些额外的列。 当我尝试调试代码时,“myReader.FieldCount”显示了22列。 我试图以编程方式删除那些空的列。 但它引发了行数据的其他问题。对于某些行,它仅显示18或15列 缺少某些列的数据。 有没有更好的方法来处理excel。 这是我的代码
@@@@@@@@@@@@@
if (sourceFile.ToUpper().IndexOf(".XLSX") >= 0) // excel 2007 or later file
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + sourceFile + ";Extended Properties=\"Excel 12.0;HDR=No;\"";
else // previous excel versions
strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceFile + ";Extended Properties=\"Excel 8.0;HDR=No;\"";
OleDbConnection conn = null;
StreamWriter wrtr = null;
OleDbCommand cmd = null;
OleDbDataReader myReader = null;
try
{
conn = new OleDbConnection(strConn);
conn.Open();
cmd = new OleDbCommand("SELECT * FROM [" + worksheetName + "]", conn);
cmd.CommandType = CommandType.Text;
myReader = cmd.ExecuteReader();
wrtr = new StreamWriter(targetFile);
while (myReader.Read())
{
List<string> builder = new List<string>();
for (int y = 0; y < myReader.FieldCount; y++)
{
if(!string.IsNullOrEmpty(myReader[y].ToString()))
builder.Add("\"" + myReader[y].ToString() + "\"");
}
wrtr.WriteLine(string.Join(",", builder));
}
答案 0 :(得分:0)
而不是SELECT *列出您要选择的列:
cmd = new OleDbCommand("SELECT col1, col2, col3 FROM [" + worksheetName + "]", conn);
答案 1 :(得分:0)
最好的解决方案是通过正则表达式判断和过滤列名 一旦列为空,C#将自动生成列名称,如'F21''F22'(21表示空列是第21列)
DataTable x = ... // x is DataTable Name
int index = ... // index is the column sequence no.
string col = x.Columns[index].Columnname.ToString().Trim();
if (!System.Text.RegularExpressions.Regex.IsMatch(col, "^[A-Z]{1}[0-9]*"))
// do something