Сообщение Как открыть csv в excel на C#? от 15.06.2016 13:02
Изменено 22.06.2016 18:37 VladD2
Нужно скопировать из CSV в книгу Excel. Причем количество строк может быть весьма большим и там есть строки на русском языке. Пока удается нормально работать только одному варианту:
Но уж больно долго этот код выполняется.
Пробую просто открыть книгу
Упрямо не хочет создавать строки
Через создание именной таблицы:
Столбцы есть, но проблема — крякозябры, кодировка не та русских букв не видит.
DataTable csvData = new DataTable();
using (TextFieldParser csvReader = new TextFieldParser(this.out_file, Encoding.GetEncoding(1251)))
{
csvReader.SetDelimiters(new string[] { ";" });
csvReader.HasFieldsEnclosedInQuotes = true;
//read column names
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add();
}
int strnum = 2;
while (!csvReader.EndOfData)
{
if (this.backgroundWorker1.CancellationPending)
return;
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (this.backgroundWorker1.CancellationPending)
return;
WS_mergexls.Cells[i + 1][strnum] = fieldData[i];
}
strnum++;
}
}Но уж больно долго этот код выполняется.
Пробую просто открыть книгу
App.Workbooks.OpenText(out_file,
Excel.XlPlatform.xlWindows,
1,
Excel.XlTextParsingType.xlDelimited,
Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
true, //Разделители одинарные
false, //Разделители :Tab
true, //Semicolon
false, //Comma
false, //Space
false, //Other
Type.Missing, //OtherChar
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
Microsoft.Office.Interop.Excel.Worksheet objExcelWorksheet = App.Workbooks[1].Sheets[1];
if (objExcelWorksheet != null)
{
int columnCount = objExcelWorksheet.UsedRange.Columns.Count;
for (int i = 1; i < columnCount + 1; i++)
{
if (objExcelWorksheet.Cells[1, i].Value != null)
{
if (!lstColumnsNames.Contains(objExcelWorksheet.Cells[1, i].Value.ToString()))
lstColumnsNames.Add(objExcelWorksheet.Cells[1, i].Value.ToString());
}
}
}Упрямо не хочет создавать строки
Через создание именной таблицы:
WorkBookUpload.Worksheets[1].QueryTables.Add("TEXT;" + Path.GetFullPath(out_file), // $A$2
(Excel.Range)(((Excel.Worksheet)WorkBookUpload.Worksheets[1]).get_Range("$A$2")), Type.Missing);
WorkBookUpload.Worksheets[1].QueryTables[1].Name = Path.GetFileNameWithoutExtension(out_file);
WorkBookUpload.Worksheets[1].QueryTables[1].FieldNames = false;
WorkBookUpload.Worksheets[1].QueryTables[1].RowNumbers = false;
WorkBookUpload.Worksheets[1].QueryTables[1].FillAdjacentFormulas = false;
WorkBookUpload.Worksheets[1].QueryTables[1].PreserveFormatting = true;
WorkBookUpload.Worksheets[1].QueryTables[1].RefreshOnFileOpen = false;
WorkBookUpload.Worksheets[1].QueryTables[1].RefreshStyle = Excel.XlCellInsertionMode.xlInsertDeleteCells; //XlCellInsertionModel//.xlInsertDeleteCells;
WorkBookUpload.Worksheets[1].QueryTables[1].SavePassword = false;
WorkBookUpload.Worksheets[1].QueryTables[1].SaveData = true;
WorkBookUpload.Worksheets[1].QueryTables[1].AdjustColumnWidth = false;
WorkBookUpload.Worksheets[1].QueryTables[1].RefreshPeriod = 0;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFilePromptOnRefresh = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFilePlatform = 437;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileStartRow = 1;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileParseType = Excel.XlTextParsingType.xlDelimited;// XlTextParsingType.xlDelimited;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileTextQualifier = Excel.XlTextQualifier.xlTextQualifierDoubleQuote;// XlTextQualifier.xlTextQualifierDoubleQuote;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileConsecutiveDelimiter = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileTabDelimiter = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileSemicolonDelimiter = true;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileCommaDelimiter = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileSpaceDelimiter = false;
// WorkBookUpload.Worksheets[1].QueryTables[1].TextFileColumnDataTypes = columnDataTypes;
//Logger.GetInstance().WriteLog("Importing data...");
WorkBookUpload.Worksheets[1].QueryTables[1].Refresh(false);
WorkBookUpload.Worksheets[1].QueryTables[1].Destination.EntireColumn.AutoFit();Столбцы есть, но проблема — крякозябры, кодировка не та русских букв не видит.
Как открыть csv в excel на C#?
Нужно скопировать из CSV в книгу Excel. Причем количество строк может быть весьма большим и там есть строки на русском языке. Пока удается нормально работать только одному варианту:
Но уж больно долго этот код выполняется.
Пробую просто открыть книгу
Упрямо не хочет создавать строки
Через создание именной таблицы:
Столбцы есть, но проблема — крякозябры, кодировка не та русских букв не видит.
DataTable csvData = new DataTable();
using (TextFieldParser csvReader = new TextFieldParser(this.out_file, Encoding.GetEncoding(1251)))
{
csvReader.SetDelimiters(new string[] { ";" });
csvReader.HasFieldsEnclosedInQuotes = true;
//read column names
string[] colFields = csvReader.ReadFields();
foreach (string column in colFields)
{
DataColumn datecolumn = new DataColumn(column);
datecolumn.AllowDBNull = true;
csvData.Columns.Add();
}
int strnum = 2;
while (!csvReader.EndOfData)
{
if (this.backgroundWorker1.CancellationPending)
return;
string[] fieldData = csvReader.ReadFields();
//Making empty value as null
for (int i = 0; i < fieldData.Length; i++)
{
if (this.backgroundWorker1.CancellationPending)
return;
WS_mergexls.Cells[i + 1][strnum] = fieldData[i];
}
strnum++;
}
}Но уж больно долго этот код выполняется.
Пробую просто открыть книгу
App.Workbooks.OpenText(out_file,
Excel.XlPlatform.xlWindows,
1,
Excel.XlTextParsingType.xlDelimited,
Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
true, //Разделители одинарные
false, //Разделители :Tab
true, //Semicolon
false, //Comma
false, //Space
false, //Other
Type.Missing, //OtherChar
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
Microsoft.Office.Interop.Excel.Worksheet objExcelWorksheet = App.Workbooks[1].Sheets[1];
if (objExcelWorksheet != null)
{
int columnCount = objExcelWorksheet.UsedRange.Columns.Count;
for (int i = 1; i < columnCount + 1; i++)
{
if (objExcelWorksheet.Cells[1, i].Value != null)
{
if (!lstColumnsNames.Contains(objExcelWorksheet.Cells[1, i].Value.ToString()))
lstColumnsNames.Add(objExcelWorksheet.Cells[1, i].Value.ToString());
}
}
}Упрямо не хочет создавать строки
Через создание именной таблицы:
WorkBookUpload.Worksheets[1].QueryTables.Add("TEXT;" + Path.GetFullPath(out_file), // $A$2
(Excel.Range)(((Excel.Worksheet)WorkBookUpload.Worksheets[1]).get_Range("$A$2")), Type.Missing);
WorkBookUpload.Worksheets[1].QueryTables[1].Name = Path.GetFileNameWithoutExtension(out_file);
WorkBookUpload.Worksheets[1].QueryTables[1].FieldNames = false;
WorkBookUpload.Worksheets[1].QueryTables[1].RowNumbers = false;
WorkBookUpload.Worksheets[1].QueryTables[1].FillAdjacentFormulas = false;
WorkBookUpload.Worksheets[1].QueryTables[1].PreserveFormatting = true;
WorkBookUpload.Worksheets[1].QueryTables[1].RefreshOnFileOpen = false;
WorkBookUpload.Worksheets[1].QueryTables[1].RefreshStyle = Excel.XlCellInsertionMode.xlInsertDeleteCells; //XlCellInsertionModel//.xlInsertDeleteCells;
WorkBookUpload.Worksheets[1].QueryTables[1].SavePassword = false;
WorkBookUpload.Worksheets[1].QueryTables[1].SaveData = true;
WorkBookUpload.Worksheets[1].QueryTables[1].AdjustColumnWidth = false;
WorkBookUpload.Worksheets[1].QueryTables[1].RefreshPeriod = 0;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFilePromptOnRefresh = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFilePlatform = 437;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileStartRow = 1;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileParseType = Excel.XlTextParsingType.xlDelimited;// XlTextParsingType.xlDelimited;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileTextQualifier = Excel.XlTextQualifier.xlTextQualifierDoubleQuote;// XlTextQualifier.xlTextQualifierDoubleQuote;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileConsecutiveDelimiter = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileTabDelimiter = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileSemicolonDelimiter = true;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileCommaDelimiter = false;
WorkBookUpload.Worksheets[1].QueryTables[1].TextFileSpaceDelimiter = false;
// WorkBookUpload.Worksheets[1].QueryTables[1].TextFileColumnDataTypes = columnDataTypes;
//Logger.GetInstance().WriteLog("Importing data...");
WorkBookUpload.Worksheets[1].QueryTables[1].Refresh(false);
WorkBookUpload.Worksheets[1].QueryTables[1].Destination.EntireColumn.AutoFit();Столбцы есть, но проблема — крякозябры, кодировка не та русских букв не видит.