Я использовал interop , чтобы открыть Excel и изменить ширину столбцов после завершения данных. Если вы используете взаимодействие, чтобы плюнуть данные в новую книгу Excel (если это то, что вы хотите), это будет очень медленно. Вместо этого я сгенерировал CSV , а затем открыл CSV в Excel. У этого есть свои проблемы, но я нашел этот самый быстрый метод.
Сначала конвертируйте CSV:
// Convert array data into CSV format.
// Modified from http://csharphelper.com/blog/2018/04/write-a-csv-file-from-an-array-in-c/.
private string GetCSV(List<string> Headers, List<List<double>> Data)
{
// Get the bounds.
var rows = Data[0].Count;
var cols = Data.Count;
var row = 0;
// Convert the array into a CSV string.
StringBuilder sb = new StringBuilder();
// Add the first field in this row.
sb.Append(Headers[0]);
// Add the other fields in this row separated by commas.
for (int col = 1; col < cols; col++)
sb.Append("," + Headers[col]);
// Move to the next line.
sb.AppendLine();
for (row = 0; row < rows; row++)
{
// Add the first field in this row.
sb.Append(Data[0][row]);
// Add the other fields in this row separated by commas.
for (int col = 1; col < cols; col++)
sb.Append("," + Data[col][row]);
// Move to the next line.
sb.AppendLine();
}
// Return the CSV format string.
return sb.ToString();
}
Затем экспортируйте его в Excel!
public void ExportToExcel()
{
// Initialize app and pop Excel on the screen.
var excelApp = new Excel.Application
{
Visible = true
};
// I use unix time to give the files a unique name that's almost somewhat useful.
DateTime dateTime = DateTime.UtcNow;
long unixTime = ((DateTimeOffset)dateTime).ToUnixTimeSeconds();
var path = @"C:\Users\my\path\here + unixTime + ".csv";
var csv = GetCSV();
File.WriteAllText(path, csv);
// Create a new workbook and get its active sheet.
excelApp.Workbooks.Open(path);
var workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
// iterrate through each value and throw it in the chart
for (var column = 0; column < Data.Count; column++)
{
((Excel.Range)workSheet.Columns[column + 1]).AutoFit();
}
currentSheet = workSheet;
}
Тебе тоже придется установить кое-что ...
- Щелкните правой кнопкой мыши решение в обозревателе решений и выберите «Управление пакетами NuGet».
Добавить Microsoft.Office.Interop.Excel.
- На самом деле это может сработать прямо сейчас, если вы создали проект так, как этого хочет Interop.
Если это все еще не работает, я должен был создать новый проект в другой категории.
В разделе «Создать»> «Проект» выберите Visual C #> «Рабочий стол Windows»> «Консольное приложение».
В противном случае инструменты взаимодействия не будут работать.
На случай, если я что-то забыл, вот мои заявления об использовании:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;