У меня на сервере один XLS-файл с 40 столбцами.
Мне нужен экспорт в CSV-файл этого XLS-файла, но только первые пять столбцов, а не остальные.
Я пробовал этот код, используя Linq безуспешно, потому что вывод в CSV пуст.
Вопрос: что я делаю не так?!
Заранее благодарю за помощь.
Мой полный код ниже:
string filePath = HttpContext.Current.Server.MapPath(fileName.ToString());
FileStream stream = File.Open(filePath, FileMode.Open, FileAccess.Read);
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(stream);
DataSet result = excelReader.AsDataSet();
excelReader.Close();
result.Tables[0].TableName.ToString();
string csvData = "";
int row_no = 0;
int ind = 0;
while (row_no < result.Tables[ind].Rows.Count)
{
string s1 = "";
var columns = File
.ReadLines(filePath)
.SkipWhile(line => !string.IsNullOrWhiteSpace(line))
.FirstOrDefault()
.Split(new char[] { '\t', ',', ';' }, StringSplitOptions.RemoveEmptyEntries);
List<string> expectedColumns = new List<string>() {
"AAA",
"BBB",
"CCC",
"DDD",
"EEE"};
if (expectedColumns.Except(columns, StringComparer.OrdinalIgnoreCase).Any())
{
// Some expected columns are not found; incorrect csv
}
else
{
for (int i = 0; i < result.Tables[ind].Columns.Count; i++)
{
s1 += result.Tables[ind].Rows[row_no][i].ToString() + "|";
}
if (s1.Length > 160)
{
csvData += s1;
}
}
row_no++;
csvData += "\n";
}
output = HttpContext.Current.Server.MapPath(DateTime.Now.ToString("dd-MM-yyyy") + ".csv");
newOutput = Path.GetFileName(output);
StreamWriter csv = new StreamWriter(@output, false);
csv.Write(csvData);
csv.Close();
csv.Dispose();