Pregunta Exportar los valores en List para sobresalir


Hola, estoy teniendo un contenedor de lista que contiene la lista de valores. Deseo exportar los valores de la lista directamente a Excel. ¿Hay alguna forma de hacerlo directamente?


12
2018-02-05 09:45


origen


Respuestas:


OK, aquí hay una guía paso a paso si quiere usar COM.

  1. Tienes que tener Excel instalado.
  2. Agregue una referencia a su proyecto al excel interop dll. Para hacer esto en la pestaña .NET seleccione Microsoft.Office.Interop.Excel Podría haber múltiples ensambles con este nombre Selecciona el apropiado para su Visual Studio Y la versión de Excel.
  3. Aquí hay un ejemplo de código para crear un nuevo Libro de trabajo y llenar una columna con los artículos de tu lista.

using NsExcel = Microsoft.Office.Interop.Excel;

public void ListToExcel(List<string> list)
{
    //start excel
    NsExcel.ApplicationClass excapp = new Microsoft.Office.Interop.Excel.ApplicationClass();

    //if you want to make excel visible           
    excapp.Visible = true;

    //create a blank workbook
    var workbook = excapp.Workbooks.Add(NsExcel.XlWBATemplate.xlWBATWorksheet);

    //or open one - this is no pleasant, but yue're probably interested in the first parameter
    string workbookPath = "C:\test.xls";
    var workbook = excapp.Workbooks.Open(workbookPath,
        0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "",
        true, false, 0, true, false, false);

    //Not done yet. You have to work on a specific sheet - note the cast
    //You may not have any sheets at all. Then you have to add one with NsExcel.Worksheet.Add()
    var sheet = (NsExcel.Worksheet)workbook.Sheets[1]; //indexing starts from 1

    //do something usefull: you select now an individual cell
    var range = sheet.get_Range("A1", "A1");
    range.Value2 = "test"; //Value2 is not a typo

    //now the list
    string cellName;
    int counter = 1;
    foreach (var item in list)
    {
        cellName = "A" + counter.ToString();
        var range = sheet.get_Range(cellName, cellName);
        range.Value2 = item.ToString();
        ++counter;
    }

    //you've probably got the point by now, so a detailed explanation about workbook.SaveAs and workbook.Close is not necessary
    //important: if you did not make excel visible terminating your application will terminate excel as well - I tested it
    //but if you did it - to be honest - I don't know how to close the main excel window - maybee somewhere around excapp.Windows or excapp.ActiveWindow
}

16
2018-02-05 12:30



Usando la idea de CSV, si es solo una lista de cadenas. Asumiendo l es tu lista:

using System.IO;

using(StreamWriter sw = File.CreateText("list.csv"))
{
  for(int i = 0; i < l.Count; i++)
  {
    sw.WriteLine(l[i]);
  }
}

10
2018-02-05 09:52



Utilizando ClosedXML biblioteca (no es necesario instalar MS Excel

Simplemente escribo un ejemplo simple para mostrarle cómo puede nombrar el archivo, la hoja de trabajo y seleccionar celdas:

    var workbook = new XLWorkbook();
    workbook.AddWorksheet("sheetName");
    var ws = workbook.Worksheet("sheetName");

    int row = 1;
    foreach (object item in itemList)
    {
        ws.Cell("A" + row.ToString()).Value = item.ToString();
        row++;
    }

    workbook.SaveAs("yourExcel.xlsx");

Si lo prefiere, puede crear un System.Data.DataSet o un System.Data.DataTable con todos los datos y luego simplemente agregarlo como un workseet con workbook.AddWorksheet(yourDataset) o workbook.AddWorksheet(yourDataTable);


7
2018-06-29 11:29



Puede sacarlos a un archivo .csv y abra el archivo en excel. ¿Es eso lo suficientemente directo?


1
2018-02-05 09:49



La forma más directa (en mi opinión) sería simplemente armar un archivo CSV. Si quiere entrar en formato y escribir en un archivo * .xlsx, hay soluciones más complicadas (y API) para hacer eso por ti.


1
2018-02-05 09:49



Dependiendo del entorno en el que quieras hacer esto, es posible usando Excel Interop. Sin embargo, es un desastre lidiar con COM y asegurarse de que usted borre los recursos, de lo contrario las instancias de Excel se mantendrán en su máquina.

Mira esto Ejemplo de MSDN si quieres aprender más

Dependiendo de su formato, usted puede producir CSV o SpreadsheetML, eso no es demasiado difícil. Otras alternativas son usar bibliotecas de terceros para hacerlo. Obviamente, cuestan dinero.


0
2018-02-05 09:48



la única forma fácil de hacerlo es abrir Excel crear una hoja que contenga los datos de prueba que desea exportar, luego decir a excel guardar como xml abrir el xml ver el formato XML que Excel espera y generarlo reemplazando los datos de prueba con los datos de exportación

SpreadsheetML Markup Spec

@lan esto es xml para un archivo execel simle con un valor de columna generé con Office 2003 este formato es para oficina 2003 y superior

<?xml version="1.0"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:o="urn:schemas-microsoft-com:office:office"
 xmlns:x="urn:schemas-microsoft-com:office:excel"
 xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
 xmlns:html="http://www.w3.org/TR/REC-html40">
 <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
  <Author>Dancho</Author>
  <LastAuthor>Dancho</LastAuthor>
  <Created>2010-02-05T10:15:54Z</Created>
  <Company>cc</Company>
  <Version>11.9999</Version>
 </DocumentProperties>
 <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
  <WindowHeight>13800</WindowHeight>
  <WindowWidth>24795</WindowWidth>
  <WindowTopX>480</WindowTopX>
  <WindowTopY>105</WindowTopY>
  <ProtectStructure>False</ProtectStructure>
  <ProtectWindows>False</ProtectWindows>
 </ExcelWorkbook>
 <Styles>
  <Style ss:ID="Default" ss:Name="Normal">
   <Alignment ss:Vertical="Bottom"/>
   <Borders/>
   <Font/>
   <Interior/>
   <NumberFormat/>
   <Protection/>
  </Style>
 </Styles>
 <Worksheet ss:Name="Sheet1">
  <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="6" x:FullColumns="1"
   x:FullRows="1">
   <Row>
    <Cell><Data ss:Type="String">Value1</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Value2</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Value3</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Value4</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Value5</Data></Cell>
   </Row>
   <Row>
    <Cell><Data ss:Type="String">Value6</Data></Cell>
   </Row>
  </Table>
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <Selected/>
   <Panes>
    <Pane>
     <Number>3</Number>
     <ActiveRow>5</ActiveRow>
    </Pane>
   </Panes>
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet2">
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
 <Worksheet ss:Name="Sheet3">
  <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
   <ProtectObjects>False</ProtectObjects>
   <ProtectScenarios>False</ProtectScenarios>
  </WorksheetOptions>
 </Worksheet>
</Workbook>

0
2018-02-05 09:49