2013-07-26 4 views
0

У меня есть этот код, который экспортирует файл excel с помощью C# из 1 listview. Моя проблема теперь, если у меня есть 2 списка, которые будут сгенерированы в 1 файле excel, мой план - listview1 для sheet1, а listview2 - для листа2.Как экспортировать файл excel в C# в несколько листов

это мой код генерирует ListView1, чтобы преуспеть в sheet1:

string[] st = new string[listView1.Columns.Count]; 
DirectoryInfo di = new DirectoryInfo(Environment.ExpandEnvironmentVariables("%USERPROFILE%") + @"\Desktop\"); 
if (di.Exists == false) 
    di.Create(); 
fileName f = new fileName(); 
if (f.ShowDialog() == DialogResult.OK) 
{ 
    StreamWriter sw = new StreamWriter(Environment.ExpandEnvironmentVariables("%USERPROFILE%") + @"\Desktop\" + f.Filenam + ".xls", false); 
    sw.AutoFlush = true; 
    string header = ""; 
    for (int col = 0; col < listView1.Columns.Count; col++) 
    { 
     header += listView1.Columns[col].Text.ToString() + "\t"; 
    } 
    sw.Write(header); 
    int rowIndex = 1; 
    int row = 0; 
    string st1 = ""; 
    for (row = 0; row < listView1.Items.Count; row++) 
    { 
     if (rowIndex <= listView1.Items.Count) 
      rowIndex++; 

     st1 = "\n"; 

     for (int col = 0; col < listView1.Columns.Count; col++) 
     { 
      st1 = st1 + listView1.Items[row].SubItems[col].Text.ToString() + "\t"; 
     } 
     sw.Write(st1); 
    } 
    sw.Close(); 
    FileInfo fil = new FileInfo(Environment.ExpandEnvironmentVariables("%USERPROFILE%") + @"\Desktop\" + f.Filenam + ".xls"); 
    if (fil.Exists == true) 
     MessageBox.Show("Process Completed", "Export to Excel", MessageBoxButtons.OK, MessageBoxIcon.Information); 
} 

ответ

3

Я использовал EPPlus, его свободный, дают преимущества в производительности, а также предоставляет множество функций Excel. Другой вариант, который вы можете найти, - Microsoft InterOp для экспорта Excel, но он имеет проблемы с производительностью.

+1

+1 Проблемы с производительностью и ограничениями Microsoft Interop. – mike27015

+1

+1 на EPPlus - только недостатком является то, что он создает файлы xlsx, поэтому, если вам нужно xls, это может быть не для вас. – andrew

+0

Oh .. thanks @Andrew, где ваш +1 :-) – Irfan

1

Как Ирфан уже упоминалось, вы могли бы сделать это с Microsoft.Office.Interop

Excel.Application xlsApp = new Excel.Application(); 
Excel.Workbook workbook; 
workbook = xlsApp.Workbooks.Open(configuration.XLSExportedFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 
foreach (Excel.Worksheet sheet in workbook.Sheets) 
{ 
     workbook.Activate(); 
     sheet.Activate(); 
} 

Это помогло бы вам пройти через все ваши листы в файле Excel. Теперь, если вы хотите развернуть его несколькими листами, вы можете прочитать C# how to add Excel Worksheet programmatically Office XP/2003, чтобы узнать, как добавить дополнительные листы.

Теперь вы можете добавить текст в переменную, например, HTML или любую информацию из вашего списка.

string html = Clipboard.GetText(TextDataFormat.Html); 

Теперь вы можете играть с Clipboard (альтернативное решение, но этого избежать).

Clipboard.SetText(html); 

Он фактически вводит информацию в ваш буфер обмена, что вы можете сделать, это передать все ваши значения в буфер обмена.

И теперь последним шагом было бы вставить его в нужное положение.

sheet.Range(cellmapp).PasteSpecial(); 

Адрес cellmap должен быть, например, A1. Если ваш текст, который у вас есть в вашем списке, слишком длинный, вы можете адаптировать свои строки/столбцы.

//Auto fits all columns and rows 
//https://stackoverflow.com/questions/14748322/c-sharp-autofit-method-for-excel-sheet 
sheet.Columns.AutoFit(); 
sheet.Rows.AutoFit(); 

Не забывайте, что если вы работаете с COM процессами, близким каждый объектом и файлом.

workbook.SaveAs(configuration.XLSExportedFile); 
workbook.Close(); 
xlsApp.Quit(); 
xlsApp.Dispose(); 

Я не говорю, что было бы лучшим решением, чтобы сделать, но вы можете посмотреть на OpenXML тоже.

0

Я использовал ClosedXML прежде, синтаксис действительно чист и прост, и вы можете получить такого рода задачи сделано всего несколько строк

Этот блок показывает, как добавить список в новый лист и сохранить его

List<string> list = new List<string>(); 
var workbook = new XLWorkbook(); 
var worksheet = workbook.Worksheets.Add("Sample Sheet"); 
worksheet.Cell(1, 1).Value = list; 
workbook.SaveAs("HelloWorld.xlsx"); 
Смежные вопросы