В моем приложении мне нужно прочитать файл excel и отобразить заголовки (заголовок) в табличном формате. Это прекрасно работает. Но для некоторых файлов excel он показывает (файл excel имеет 20 столбцов) некоторые дополнительные столбцы (column21, column22 и т. Д.). Не уверен, почему он показывает эти дополнительные столбцы , когда я проверил файл excel, он имеет только 20 столбцов и 21 или 22 столбца полностью пуст. Не уверен, почему мой экран отображает эти дополнительные столбцы. Когда я попытался отладить код, «myReader.FieldCount» показывал 22 столбца. Я попытался программно удалить те столбцы, которые пусты. Но он поднял некоторые проблемы с данными строк. Для некоторых строк в нем отображаются только 18 или 15 столбцов, так как там отсутствует данные для некоторых столбцов. Есть ли лучший способ справиться с преимуществом. Вот мой кодРабота с дополнительными столбцами в файлах Excel - C#
@@@@@@@@@@@@@
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));
}
Несколько наблюдений. Если вы хотите получить заголовки столбцов, нет необходимости перебирать все строки на листе с помощью DataReader; Просто проверьте первый ряд, предполагая, что это место, где они расположены. Вы упоминаете, что игнорируете пустые поля подряд, но вы, кажется, озадачены тем, почему вы видите только количество X в качестве вывода ... что это такое? Помните, что пробелы также считаются символами, поэтому, если ячейка кажется пустой, это может и не быть. Используйте string.Trim() или String.IsNullOrWhiteSpace (.NET 4.0>), чтобы убедиться, что вы не включаете «пустые» пробелы. –