У меня есть файл Excel с данными в нем. Я хочу написать некоторые конкретные строки в другой файл Excel, который я создал кодом. Кстати, у меня есть индексы этих строк в списке. Как я могу это сделать?
Как экспортировать данные в файл Excel
Ответ 1
MS предоставляет OpenXML SDK V 2.5 - см. https://msdn.microsoft.com/en-us/library/bb448854(v=office.15).aspx
Это может читать + писать файлы MS Office (включая Excel)...
Другой вариант см. http://www.codeproject.com/KB/office/OpenXML.aspx
ЕСЛИ вам нужно больше как рендеринг, формулы и т.д., тогда есть разные коммерческие библиотеки, такие как Aspose и Flexcel...
Ответ 2
private void button1_Click(object sender, EventArgs e)
{
Excel.Application xlApp ;
Excel.Workbook xlWorkBook ;
Excel.Worksheet xlWorkSheet ;
object misValue = System.Reflection.Missing.Value;
xlApp = new Excel.ApplicationClass();
xlWorkBook = xlApp.Workbooks.Add(misValue);
xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
xlWorkSheet.Cells[1, 1] = "http://csharp.net-informations.com";
xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
releaseObject(xlWorkSheet);
releaseObject(xlWorkBook);
releaseObject(xlApp);
MessageBox.Show("Excel file created , you can find the file c:\\csharp-Excel.xls");
}
private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (Exception ex)
{
obj = null;
MessageBox.Show("Exception Occured while releasing object " + ex.ToString());
}
finally
{
GC.Collect();
}
}
Приведенный выше код взят прямо с csharp.net, пожалуйста, посмотрите на сайте.
Ответ 3
Я также боролся с аналогичной проблемой, связанной с экспортом данных в электронную таблицу Excel с использованием С#. Я пробовал много разных методов работы с внешними DLL, и мне не повезло.
Для функциональности экспорта вам не нужно использовать что-либо, имеющее дело с внешними DLL. Вместо этого просто сохраните заголовок и тип содержимого ответа.
Вот статья, которая мне показалась довольно полезной. В статье рассказывается, как экспортировать данные в электронные таблицы Excel с использованием ASP.NET.
http://www.icodefor.net/2016/07/export-data-to-excel-sheet-in-asp-dot-net-c-sharp.html
Ответ 4
Я использовал взаимодействие, чтобы открыть 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 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 С#> "Рабочий стол Windows"> "Консольное приложение". В противном случае инструменты взаимодействия не будут работать.
В случае, если я что-то забыл, вот мои заявления об использовании:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using Excel = Microsoft.Office.Interop.Excel;