Как экспортировать DataTable в Excel

Как я могу экспортировать DataTable в Excel на C #? Я использую Windows Forms. DataTable связан с элементом управления DataGridView . Мне нужно экспортировать записи DataTable в Excel.


Я бы рекомендовать ClosedXML —

Вы можете превратить DataTable в рабочий лист Excel с помощью некоторого очень читаемого кода:

   XLWorkbook wb = new XLWorkbook (); DataTable dt = GetDataTableOrWhatever (); wb.Worksheets.Add (dt, "WorksheetName");  

Разработчик отзывчив и полезен. Проект активно развивается, документация великолепна.

3


Попробуйте простой код, чтобы преобразовать DataTable в файл Excel как csv:

  var lines = new List  (); string []  columnNames = dataTable.Columns .Cast  () .Select (column => column.ColumnName) .ToArray (); var header = string.Join (",", columnNames.Select (name => $ "" {  name}  "")); lines.Add (header); var valueLines = dataTable.AsEnumerable () .Select (row => string.Join (",", row.ItemArray.Select (val => $ ""  {val}  ""))); lines.AddRange (valueLines); File.WriteAllLines ("excel.csv", lines);  

Будет записан новый файл excel.csv в текущий рабочий каталог , который обычно либо находится там, где находится .exe, либо откуда вы его запускаете.

12


Элегантный вариант пишет метод расширения (см. ниже) для класса DataTable платформы .net.

Этот метод расширения можно вызвать следующим образом:

   using System; using System.Collections.Generic; using System.Linq; using Excel = Microsoft.Office.Interop.Excel; using System.Data; using System.Data.OleDb; DataTable dt;//заполняем данные таблицы в dt здесь.  ..//экспортировать DataTable в Excel//сохранить файл Excel, не делая его видимым, если указан путь к файлу//не сохраняйте файл Excel, просто сделайте его видимым, если путь к файлу не указан. Endt.ExportToExcel (ExcelFilePath);   

Метод расширения для класса DataTable:

  public static class My_DataTable_Extensions {//Экспорт DataTable в файл Excel с именами полей в строке заголовка//- Сохранить файл Excel, не делая его видимым, если указан путь к файлу// - Не сохраняйте файл Excel, просто сделайте его видимым, если путь к файлу не указан public static void ExportToExcel (эта таблица DataTable, строка excelFilePath = null) {try {if (tbl == null ||  tbl.Columns.Count == 0) throw new Exception ("ExportToExcel: пустая или пустая таблица ввода!  n"); //загружаем Excel и создаем новую книгу var excelApp = new Excel.Application ();  excelApp.Workbooks. Добавлять(); //отдельный рабочий лист Excel._Worksheet workSheet = excelApp.ActiveSheet; //заголовки столбцов для (var i = 0; i  

6


Решение на основе статьи tuncalik (спасибо за идею), но в случае больших таблиц работает намного быстрее (и немного менее понятно).

  общедоступный статический класс My_DataTable_Extensions {///
///Экспорт таблицы данных в файл Excel///
/// Исходная таблица данных /// Путь к имени файла результата  public static void ExportToExcel (это System.Data.DataTable DataTable, строка ExcelFilePath = null) {try {int ColumnsCount;  if (DataTable == null || (ColumnsCount = DataTable.Columns.Count) == 0) throw new Exception ("ExportToExcel: Null or empty input table!  n"); //загружаем Excel и создаем новую книгу Microsoft.Office.Interop.Excel.Application Excel = new Microsoft.Office.Interop.Excel.Application ();  Excel.Workbooks.Add (); //отдельный рабочий лист Microsoft.Office.Interop.Excel._Worksheet Worksheet = Excel.ActiveSheet;  объект [] Заголовок = новый объект [ColumnsCount]; //заголовки столбцов для (int i = 0; i  

4


Попробуйте эту функцию передать datatable и путь к файлу, куда вы хотите экспортировать

  public void CreateCSVFile (ref DataTable dt, string strFilePath) {try {//Создаем файл CSV, в который будут экспортированы данные сетки  .  StreamWriter sw = новый StreamWriter (strFilePath, false); //Сначала напишем заголовки. //Таблица данных dt = m_dsProducts.Tables [0];  int iColCount = dt.Columns.Count;  для (int я = 0; я  

3


Самый лучший и простой способ

  private void exportToExcel (DataTable dt) {/* Настроить книгу, рабочие листы и приложение Excel */Microsoft.Office.Interop  .Excel.Application oexcel = новый Microsoft.Office.Interop.Excel.Application ();  попробуйте {string path = AppDomain.CurrentDomain.BaseDirectory;  объект misValue = System.Reflection.Missing.Value;  Microsoft.Office.Interop.Excel.Workbook obook = oexcel.Workbooks.Add (misValue);  Microsoft.Office.Interop.Excel.Worksheet osheet = новый Microsoft.Office.Interop.Excel.Worksheet (); //obook.Worksheets.Add (misValue);  osheet = (Microsoft.Office.Interop.Excel.Worksheet) obook.Sheets ["Sheet1"];  int colIndex = 0;  int rowIndex = 1;  foreach (DataColumn dc в dt.Columns) {colIndex ++;  osheet.Cells [1, colIndex] = dc.ColumnName;  } foreach (DataRow отображается в dt.Rows) {rowIndex ++;  colIndex = 0;  foreach (DataColumn dc в dt.Columns) {colIndex ++;  osheet.Cells [rowIndex, colIndex] = dr [dc.ColumnName];  }} osheet.Columns.AutoFit ();  строка filepath = "C: \ Temp \ Book1"; //Освободить и завершить работу excel obook.SaveAs (filepath);  obook.Close ();  oexcel.Quit ();  releaseObject (osheet);  releaseObject (объект);  releaseObject (oexcel);  GC.Collect ();  } catch (Exception ex) {oexcel.Quit ();  log.AddToErrorLog (например, это. Имя);  }}  

2


Вы можете использовать мою библиотеку SwiftExcel. Это особенно хорошо, когда производительность и низкое использование памяти имеют место, поскольку он записывает данные непосредственно в файл:

  using (var ew = new ExcelWriter ("C: \ temp  \ test.xlsx ")) {for (var row = 1; row  

Команда Nuget для установки:

  Install-Package SwiftExcel  


Используя пакет Nuget DocumentFormat.OpenXml , я создал одноэлементный класс, который обрабатывает экспорт в Excel из DataTable или DataSet . Таблицы будут представлены в виде отдельных листов в книге.

Основной класс

  общедоступный запечатанный класс OfficeOpenXML.  {частный статический Ленивый  _instance = новый Ленивый  (() => новый OfficeOpenXML ());  частный OfficeOpenXML () {} общедоступный статический OfficeOpenXML GetInstance () {return _instance.Value;  } общедоступный MemoryStream GetExcelStream (DataSet ds, bool firstRowAsHeader = false) {if (ds == null || ds.Tables.Count == 0) {return null;  } MemoryStream stream = новый MemoryStream ();  using (var excel = SpreadsheetDocument.Create (stream, SpreadsheetDocumentType.Workbook)) {//создаем документ и книгу WorkbookPart workbookPart = excel.AddWorkbookPart ();  Workbook workbook = новая рабочая тетрадь ();  Листы листов = новые листы (); //цикл для всех таблиц в наборе данных for (int iTable = 0; iTable  ();  Рабочий лист = новый рабочий лист ();  Данные SheetData = новые SheetData ();  Список  allRows = новый список  (); //установка заголовка листа Row headerRow = new Row () {RowIndex = 1};  для (int iColumn = 0; iColumn 

Сохранить в файл

  var excelApp = OfficeOpenXML.  GetInstance ();  var dt = GetDataTableFromDB ();  using (var stream = excelApp.GetExcelStream (dt, false))//используйте true, чтобы скрыть столбцы с данными из Excel {using (FileStream fs = new FileStream (@ "C:  Users  Public  myexcel.xlsx", FileMode.Create  )) {stream.CopyTo (фс);  fs.Flush ();  }}  

Загрузить в приложении MVC

  public ActionResult DownloadReport () {var  ds = GetDataSetFromDB ();  var excelApp = OfficeOpenXML.GetInstance ();  var file = excelApp.GetExcelStream (ds, false);  return File (file, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", Guid.NewGuid (). ToString () + ".xlsx");}  

2


Просто используйте CloseMXL.Excel Библиотека. Это просто и довольно быстро.

Class

  private DataTable getAllList () {  string constr = ConfigurationManager. ConnectionStrings ["RConnection"]. ConnectionString;  using (SqlConnection con = new SqlConnection (constr)) {using (SqlCommand cmd = new SqlCommand ("SELECT EmpId, пол, EmpName, pOnHold FROM Employee WHERE EmpId = '" + AnyVariable + "' ORDER BY EmpName")) {using (  SqlDataAdapter da = новый SqlDataAdapter ()) {DataTable dt = new DataTable ();  cmd.CommandType = CommandType.Text;  cmd.Connection = con;  da.SelectCommand = cmd;  da.Fill (dt);  dt.Columns [0] .ColumnName = "Идентификатор сотрудника";  dt.Columns [1] .ColumnName = "Пол";  dt.Columns [2] .ColumnName = "Имя сотрудника";  dt.Columns [3] .ColumnName = "На удержании";  return dt;  }}}}  

Затем другой метод, который получает набор данных

  public DataSet getDataSetExportToExcel  () {DataSet ds = новый DataSet ();  DataTable dtEmp = new DataTable («Список CLOT»);  dtEmp = getAllList ();  ds.Tables.Add (dtEmp);  ds.Tables [0] .TableName = "Сотрудник"; //Если вы хотите использовать Mutliple Tabs return ds;  }  

Теперь вы нажимаете кнопку, событие

  protected void btn_Export_Click (отправитель объекта, EventArgs  д) {DataSet ds = getDataSetExportToExcel ();  используя (XLWorkbook wb = new XLWorkbook ()) {wb.Worksheets.Add (ds);  wb.Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;  wb.Style.Font.Bold = true;  Response.Clear ();  Response.Buffer = true;  Response.Charset = "";  Response.ContentType = "приложение/vnd.openxmlformats-officedocument.spreadsheetml.sheet";  Response.AddHeader ("расположение содержимого", "вложение; имя файла = EmployeeonHoldList.xlsx");  используя (MemoryStream MyMemoryStream = new MemoryStream ()) {wb.SaveAs (MyMemoryStream);  MyMemoryStream.WriteTo (Response.OutputStream);  Response.Flush ();  Response.End ();  }}}  


Я хотел добавить этот ответ потому что я потратил много времени на поиски быстрого и надежного способа сделать это, и нигде не было полных примеров использования OpenXMLWriter для этой цели.

Во-первых, COM/Interop ( который используют многие другие ответы) подходит для этой цели, но страдает некоторыми чувствительностью. Я использовал его в течение десятилетий, и он в основном стабилен, но при реализации внешнего интерфейса хранилища данных для сотен пользователей я обнаружил, что он подвержен слишком большому количеству проблем в зависимости от машины и того, что делал пользователь, поэтому я переключился на OpenXML. OpenXML DOM довольно хорош для этой цели, но он медленнее, чем использование OpenXMLWriter. Когда вы попадаете в большие наборы данных (100K +) с большим количеством столбцов, DOM намного медленнее, чем OpenXMLWriter, поэтому я использую последний. Приведенный ниже метод записывает 420K + строк с 30+ полями менее чем за 30 секунд.

Я надеюсь, что комментариев будет достаточно, чтобы помочь любому понять, что он делает. Он упрощен тем, что записывает все значения в файл в виде строк, но вы можете реализовать логику для записи различных типов данных (и использования различных форматов ячеек) в зависимости от содержимого ваших данных. Вы также можете адаптировать его для использования в DataGridView (вместо DataTable), изменив всего несколько вещей (а именно циклы по столбцам/строкам).

Ссылка на DocumentFormat.OpenXML (d/ l с OpenXML SDK) и WindowsBase требуется.

  Импортирует DocumentFormat.OpenXmlImports DocumentFormat.OpenXml.SpreadsheetImports DocumentFormat.OpenXml.PackagingPublic Sub ExportToExcelXML (ByRef dt As DataTable, имя файла как строка данных  ) Dim wbp As WorkbookPart, wsp As WorksheetPart 'Если этот DataTable содержит больше строк, чем может поместиться в Excel, генерировать исключение Если dt.Rows.Count> 1048575 Then Throw New Exception («DataTable слишком велик для экспорта в Excel  . ") 'Удалить любой предыдущий файл с таким же именем, который может существовать.  File.Delete (filename) 'Создать документ электронной таблицы OpenXML ... Используя xls = SpreadsheetDocument.Create (filename, SpreadsheetDocumentType.Workbook)' Добавьте WorkbookPart в Spreadsheet Doc, затем добавьте WorksheetPart в WorkbookPart.  wbp = xls.AddWorkbookPart () wsp = wbp.AddNewPart (Of WorksheetPart) 'Теперь нам нужно добавить «StyleSheet» в WorkbookPart (который мы только что добавили выше).  Это позволит нам применить форматирование к нашим ячейкам.  'Добавьте WbStylesPart и StyleSheet.  Dim stp As WorkbookStylesPart = wbp.AddNewPart (Of WorkbookStylesPart) Dim ss As New Stylesheet 'Создайте только два шрифта, которые мы собираемся использовать (обычный и полужирный).  Уменьшить fBold как новый шрифт fBold.Append (New Bold) Dim fnts as New Fonts fnts.Append (New Font) 'Это создает шрифт по умолчанию (неизмененный, обычный).  Он добавляется первым, поэтому его индекс равен 0. fnts.Append (fBold) 'Это создает шрифт Bold.  Он добавлен вторым, поэтому его индекс равен 1. «Создайте настройки заливки/границы по умолчанию (они должны быть здесь, хотя я не устанавливаю никаких пользовательских заливок/границ).  Затухание полей при новой заливке Затенение изображений при появлении новых границ flls.Append (Новая заливка) brdrs.Append (Новая граница) 'Теперь мне нужно добавить форматы (NumberFormat и CellFormat).  Сначала вы создаете NumberFormat.  Это в основном шаблон формата (например, "@" для текста).  На данный момент мне нужен только текстовый формат, но при необходимости я могу добавить другие шаблоны.  «Я даю формату идентификатор 164, поскольку 163 - это место, где заканчиваются встроенные форматы Excel.  Dim nbrfmts As New NumberingFormats nbrfmts.Append (New NumberingFormat With {.NumberFormatId = 164, .FormatCode = "@"}) 'Создайте первые два CellFormats: Default, которые будут иметь индекс 0 и «Заголовок» (полужирный/по центру  ) с индексом 1. Dim cellfmts As New CellFormats () cellfmts.Append (New CellFormat () With {.FontId = 0, .NumberFormatId = 164, .FillId = 0, .BorderId = 0}) cellfmts.Append (New  CellFormat () с {.FontId = 1, .NumberFormatId = 164, .Alignment = Новое выравнивание () с {.WrapText = True,. Horizontal = HorizontalAlignmentValues.Center}}) 'Добавьте все шрифты/заливки/границы и т. Д. В таблицу стилей и добавьте все это в WorkbookStylesPart.  ss.Append (fnts) ss.Append (flls) ss.Append (brdrs) ss.Append (cellfmts) ss.NumberingFormats = nbrfmts stp.Stylesheet = ss stp.Stylesheet.Save () 'Теперь создайте OpenXMLWriter, используя WorksheetPart для  запишите ячейки на лист.  Использование oxw как OpenXmlWriter = OpenXmlWriter.Create (wsp) 'Напишите начальный элемент для рабочего листа и столбцов ... oxw.WriteStartElement (New Worksheet) oxw.WriteStartElement (New Columns ())' Теперь я перейду к циклу  столбцы в DataTable ... For c As Integer = 0 To dt.Columns.Count - 1 'Теперь мы получим ширину столбца.  Для этого мы перебираем все строки и измеряем ширину текста, используя шрифт Excel по умолчанию (в настоящее время Font: Calibri Size: 11), и возвращаем наибольшую ширину (в пикселях) для использования ниже.  'Почему бы не сделать этот цикл ниже (когда я перебираю строки для записи ячеек)?  Потому что ты не можешь.  Вы должны сначала написать XML столбца, прежде чем писать XML SheetData/Row/Cell (я подтвердил это, попробовав его), поэтому нет способа (о котором я знаю) избежать повторения всех строк дважды, если  вы хотите AutoFit.  'Настроить переменные, которые мы будем использовать для получения ширины столбцов (ниже).  Dim g = System.Drawing.Graphics.FromHwnd (IntPtr.Zero) Dim fnt = New System.Drawing.Font ("Calibri", 11) Dim wid As Double = 0 'Получить ширину заголовка (потому что, если он шире  чем самое широкое значение, мы будем использовать ширину текста заголовка).  «Я обнаружил, что необходимо добавить 2 пикселя к ширине, чтобы столбец получился такой же ширины, как и Excel.  Dim tmp As Double = g.MeasureString (dt.Columns (c) .ColumnName, New System.Drawing.Font (fnt, System.Drawing.FontStyle.Bold)). Width + 2 'Прокрутите строки в dt и получите  ширина значения в этой строке/столбце.  Если он шире, чем самая широкая ширина, с которой мы столкнулись до сих пор, используйте новую более широкую ширину в качестве нашей основы.  Для каждой строки как DataRow In dt.Rows Если tmp> wid Then wid = tmp tmp = g.MeasureString (row (c) .ToString, fnt) .Width Next 'Задайте атрибуты столбца и запишите их в файл.  Ширина задается с помощью формулы, которая преобразует пиксели в значения ширины столбца Excel.  Dim oxa As New List (Of OpenXmlAttribute) From {New OpenXmlAttribute ("min", Nothing, c + 1), New OpenXmlAttribute ("max", Nothing, c + 1), New OpenXmlAttribute ("width", Nothing, System.  Math.Round ((wid - 12 + 5)/7D + 1, 2))} oxw.WriteStartElement (New Column (), oxa) oxw.WriteEndElement () Next 'Закройте коллекцию Columns.  oxw.WriteEndElement () 'Записать начальный элемент для SheetData ... oxw.WriteStartElement (New SheetData)' Записать начальный элемент для строки заголовка.  oxw.WriteStartElement (New Row) 'Цикл по столбцам в dt.  Для каждого столбца как столбца данных в dt. Столбцы 'Напишите ячейку для заголовка этого столбца.  Все ячейки заголовка записываются с типом данных String ("str").  Я ТАКЖЕ применяю CellFormat "Header" (StyleIndex 1) ко всем ячейкам заголовка.  Это делает их жирными и сосредоточенными.  WriteCell (oxw, col.ColumnName, "str", 1) Next 'Закройте строку заголовка.  oxw.WriteEndElement () 'Перебрать все строки в dt ... Для каждой строки как DataRow в dt.Rows' Записать StartElement для этой строки ... oxw.WriteStartElement (New Row) 'Перебрать все  столбцы в dt ... Для c As Integer = 0 To dt.Columns.Count - 1 'Записать значение в этой строке/столбце в файл Excel.  Я использую тип данных «String» и значение по умолчанию CellFormat/StyleIndex.  WriteCell (oxw, row (c) .ToString, "str", 0) Next 'Закройте эту строку.  oxw.WriteEndElement () Далее 'Закройте элементы Worksheet и SheetData ... oxw.WriteEndElement () oxw.WriteEndElement () End Using' Теперь мы собираемся создать OpenXMLWriter, используя WorkbookPart (который мы создали выше).  Использование oxw As OpenXmlWriter = OpenXmlWriter.Create (wbp) 'Добавить начальные элементы для коллекции Workbook и Sheets.  oxw.WriteStartElement (New Workbook ()) oxw.WriteStartElement (New Sheets ()) 'Добавить лист (назовите лист после имени файла без расширения).  oxw.WriteElement (New Sheet () With {.Name = Path.GetFileNameWithoutExtension (filename), .SheetId = 1, .Id = xls.WorkbookPart.GetIdOfPart (wsp)}) 'Записать конечные элементы для рабочей книги/листов oxw.WriteEndElement  () oxw.WriteEndElement () End Using End UsingEnd Sub'Эта подпрограмма используется для записи значения в ячейку с использованием OpenXMLWriter.Private Sub WriteCell (ByRef oxw As OpenXmlWriter, значение As String, тип данных As String, стиль As UInt32Value) Dim oxa  Как новый список (OpenXmlAttribute) из {New OpenXmlAttribute ("t", Nothing, datatype), New OpenXmlAttribute ("s", Nothing, style)} oxw.WriteStartElement (New Cell (), oxa) Если значение  Nothing Then  oxw.WriteElement (New CellValue (value)) oxw.WriteEndElement () End Sub  

2


Взаимодействие с Excel:

Этот метод предотвращает переворачивание дат от дд-мм-гггг до мм-дд-гггг

kquote>

  public bool DataTableToExcelFile (DataTable dt, string targetFile) {const bool dontSave = false;  bool success = true; //Выход, если нет строк для экспорта if (dt.Rows.Count == 0) return false;  объект misValue = System.Reflection.Missing.Value;  Список  dateColIndex = новый Список  ();  Excel.Application excelApp = новый Excel.Application ();  Excel.Workbook excelWorkBook = excelApp.Workbooks.Add (misValue);  Excel.Worksheet excelWorkSheet = excelWorkBook.Sheets ("лист1"); //Итерируем по DataTable и заполняем рабочий лист Excel try {for (int i = -1; i  -1) {excelWorkSheet.Cells (i + 2, j + 1) = Convert.ToDateTime (dt.Rows (i) .ItemArray (j)). ToString ("d-  МММ-гггг ");  } еще {excelWorkSheet.Cells (i + 2, j + 1) = dt.Rows (i) .ItemArray (j) .ToString ();  }}}//Добавление автофильтров в рабочий лист Excel excelWorkSheet.Cells.AutoFilter (1, Type.Missing, Excel.XlAutoFilterOperator.xlAnd, Type.Missing, true); //Автоподбор столбцов для наглядности excelWorkSheet.Columns.AutoFit ();  если (File.Exists (exportFile)) File.Delete (exportFile);  excelWorkSheet.SaveAs (exportFile);  } поймать {успех = ложь;  } finally {//Делаем это независимо от того, было исключение или нет.  excelWorkBook.Close (dontSave);  excelApp.Quit ();  releaseObject (excelWorkSheet);  releaseObject (excelWorkBook);  releaseObject (excelApp);  } return success;}  

Если вас не волнует переворачивание дат, используйте ссылку «см.», которая показывает, как заполнить все ячейки в электронной таблице Excel за один строка кода:

Excel Interop — эффективность и производительность

CSV:

  общедоступная строка DataTableToCSV (DataTable dt, bool includeHeader, строка rowFilter, строка sortFilter, bool useCommaDelimiter = false, bool truncateTimesFromDates = false) {dt.DefaultView.RowFilter = rowFilter;  dt.DefaultView.Sort = sortFilter;  DataView dv = dt.DefaultView;  строка csv = DataTableToCSV (dv.ToTable, includeHeader, useCommaDelimiter, truncateTimesFromDates); //сбросить фильтрацию dt.DefaultView.RowFilter = string.Empty;  return csv;} открытая строка DataTableToCsv (DataTable dt, bool includeHeader, bool useCommaDelimiter = false, bool truncateTimesFromDates = false) {StringBuilder sb = new StringBuilder ();  разделитель строк = Constants.vbTab;  если (useCommaDelimiter) delimter = ",";  если (includeHeader) {foreach (DataColumn dc в dt.Columns) {sb.AppendFormat ("{0}" + Constants.vbTab, dc.ColumnName);  }//удаляем последнюю вкладку sb.Remove (sb.ToString.Length - 1, 1);  sb.Append (Environment.NewLine);  } foreach (DataRow в dt.Rows) {foreach (DataColumn dc в dt.Columns) {if (Information.IsDate (dr (dc.ColumnName) .ToString ()) & dr (dc.ColumnName) .ToString ().  Содержит (".") == false & truncateTimesFromDates) {sb.AppendFormat ("{0}" + разделитель, Convert.ToDateTime (dr (dc.ColumnName) .ToString ()). Date.ToShortDateString ());  } else {sb.AppendFormat ("{0}" + разделитель, CheckDBNull (dr (dc.ColumnName) .ToString (). Заменять(",", "")));  }}//удаляем последнюю вкладку sb.Remove (sb.ToString.Length - 1, 1);  sb.Append (Environment.NewLine);  } return sb.ToString;} общедоступное перечисление enumObjectType {StrType = 0, IntType = 1, DblType = 2} открытый объект CheckDBNull (объект obj, enumObjectType ObjectType = enumObjectType.StrType) {объект objReturn = null;  objReturn = obj;  если (ObjectType == enumObjectType.StrType & Information.IsDBNull (obj)) {objReturn = "";  } else if (ObjectType == enumObjectType.IntType & Information.IsDBNull (obj)) {objReturn = 0;  } else if (ObjectType == enumObjectType.DblType & Information.IsDBNull (obj)) {objReturn = 0.0;  } return objReturn;}  


С пакетом NuGet EPPlus это очень просто.

  public class TestObject {public int Col1 {get;  набор;  } public int Col2 {получить;  набор;  } публичная строка Col3 {получить;  набор;  } общедоступный DateTime Col4 {получить;  набор;  }} [TestMethod] public void LoadFromCollection_MemberList_Test () {//https://stackoverflow.com/questions/32587834/epplus-loadfromcollection-text-converted-to-number/32590626#32590626 var TestObjectList = new List  pi.Name! = "Col1") .Select (pi =>  (MemberInfo) pi) .ToArray ();  var worksheet = pck.Workbook.Worksheets.Add ("Sheet1");  workheet.Cells.LoadFromCollection (TestObjectList, true, TableStyles.Dark1, BindingFlags.Public | BindingFlags.Instance, mi);  pck.Save ();  }}  

Обратите внимание, что Col1 НЕТ в выводе:


Что касается ответа tuncalik , это здорово, особенно если вы хотите немного поиграть с кодом :), но он помещает мои даты в Excel в американском формате, т.е. 2 марта 2014 года, в Великобритании — 02.03.2014, а в США — 03.02.2014 с первым месяцем, а затем днем ​​недели. Мне нужно иметь его в британском формате, любые идеи, пожалуйста?

Я проверил, что он хранится в британском формате в моей таблице данных, а также мой Excel настроен на Великобританию, но по какой-то причине, когда он делает Документ Excel, который он считает своим США (это потому, что Microsoft — компания из США 🙂

Я попробую поэкспериментировать с кодами культуры, но пока не знаю, куда это поместить. Пытался, но это не дало результата.

p.s.

Мне пришлось изменить одну строку, чтобы заставить ее работать, добавив «приведение», как показано ниже

 //отдельный рабочий листExcel._Worksheet workSheet  = (Excel._Worksheet) excelApp.ActiveSheet;  

Обновление: я добился британского форматирования дат путем преобразования в формат LongDateTime, но это только работа.

  DateTime startDate = Convert.ToDateTime (myList [0] .ToString ()); string strStartDate = startDate.ToLongDateString (); DateTime endDate = Convert.ToDateTime (myList [myListTotalRows].  )); строка strEndDate = endDate.ToLongDateString ();   

ура.


Вы можете использовать EasyXLS, которая представляет собой библиотеку для экспорта файлов Excel.

Проверьте этот код:

  DataSet ds = new DataSet (); ds.Tables.Add (dataTable); ExcelDocument xls = new ExcelDocument (); xls.easy_WriteXLSFile_FromDataSet ("datatable.xls", ds, new ExcelAutoFormat (Styles.AUTOFORMAT_EASYX), DataTable)  ;  

См. также этот пример о том, как экспортировать данные в Excel в C #.


Старый поток — но подумал, что брошу сюда свой код. Я написал небольшую функцию для записи таблицы данных на новый лист Excel по указанному пути (месту). Также вам нужно будет добавить ссылку на библиотеку microsoft excel 14.0.

Я вытащил из этой ветки при написании чего-либо в Excel — Как записать некоторые данные в файл Excel (.xlsx)

Я использовал это, чтобы экстраполировать, как писать datatable

* обратите внимание, что в операторах catch у меня есть ссылка на статический класс обработчика ошибок (вы можете игнорировать их)

  using excel = Microsoft.Office.Interop  .Excel;  используя System.IO;  using System.Data;  using System.Runtime.InteropServices; //обертка класса и пространства имен не показана в этом примере private void WriteToExcel (System.Data.DataTable dt, расположение строки) {//создать экземпляр объектов excel (приложение, книга, листы) excel.Application XlObj = new excel.Application ()  ;  XlObj.Visible = false;  excel._Workbook WbObj = (excel.Workbook) (XlObj.Workbooks.Add (""));  excel._Worksheet WsObj = (excel.Worksheet) WbObj.ActiveSheet; //пройти через datatable и присвоить ячейкам значения datatable try {int row = 1;  int col = 1;  foreach (столбец DataColumn в dt.Columns) {//добавление столбцов WsObj.Cells [row, col] = column.ColumnName;  col ++;  }//сбрасываем переменные столбца и строки col = 1;  row ++;  for (int i = 0; i 

                          

1


Один из способов сделать это — также с помощью поставщика ACE OLEDB (см. также строки подключения для Excel). Конечно, вам необходимо установить и зарегистрировать провайдера. Он должен быть у вас, если у вас установлен Excel, но это необходимо учитывать при развертывании приложения.

Это пример вызова вспомогательного метода из ExportHelper : ExportHelper.CreateXlsFromDataTable (myDataTable, @ "C: tmp export. xls ");

Помощник для экспорта в файл Excel с использованием ACE OLEDB:

  открытый класс ExportHelper {закрытая константная строка ExcelOleDbConnectionStringTemplate  = "Поставщик = Microsoft.ACE.OLEDB.12.0; Источник данных = {0}; Расширенные свойства = " Excel 8.0; HDR = ДА  ";"; ///
///Создает файл Excel из элементов в DataTable и записывает их в указанный выходной файл. ///
 public static void CreateXlsFromDataTable (DataTable dataTable, string fullFilePath) {string createTableWithHeaderScript = GenerateCreateTableCommand (dataTable);  используя (var conn = new OleDbConnection (String.Format (ExcelOleDbConnectionStringTemplate, fullFilePath))) {if (conn.State! = ConnectionState.Open) {conn.Open ();  } OleDbCommand cmd = new OleDbCommand (createTableWithHeaderScript, conn);  cmd.ExecuteNonQuery ();  foreach (DataRow dataExportRow в dataTable.Rows) {AddNewRow (conn, dataExportRow);  }}} private static void AddNewRow (соединение OleDbConnection, DataRow dataRow) {string insertCmd = GenerateInsertRowCommand (dataRow);  используя (OleDbCommand cmd = new OleDbCommand (insertCmd, conn)) {AddParametersWithValue (cmd, dataRow);  cmd.ExecuteNonQuery ();  }}///
///Генерирует команду вставки строки. ///
 частная статическая строка GenerateInsertRowCommand (DataRow dataRow) {var stringBuilder = new StringBuilder ();  var columns = dataRow.Table.Columns.Cast  () .ToList ();  var columnNamesCommaSeparated = string.Join (",", columns.Select (x => x.Caption));  var questionmarkCommaSeparated = string.Join (",", columns.Select (x => "?"));  stringBuilder.AppendFormat ("INSERT INTO [{0}] (", dataRow.Table.TableName); stringBuilder.Append (columnNamesCommaSeparated); stringBuilder.Append (") VALUES ("); stringBuilder.Append (questionmarkComma);  (")");  вернуть stringBuilder.ToString ();  }///
///Добавляет параметры со значением. ///
 private static void AddParametersWithValue (OleDbCommand cmd, DataRow dataRow) {var paramNumber = 1;  for (int i = 0; i ///Получает форматированное значение для OleDbParameter. /// частный статический объект GetParameterValue (значение объекта) {if (значение - строка) {возвращаемое значение.ToString (). Replace ("'", "' '");  } возвращаемое значение;  } частная статическая строка GenerateCreateTableCommand (DataTable tableDefination) {StringBuilder stringBuilder = new StringBuilder ();  bool firstcol = true;  stringBuilder.AppendFormat ("CREATE TABLE [{0}] (", tableDefination.TableName); foreach (DataColumn tableColumn в tableDefination.Columns) {if (! firstcol) {stringBuilder.Append (",");} firstcol = false;  string columnDataType = "CHAR (255)"; switch (tableColumn.DataType.Name) {case "String": columnDataType = "CHAR (255)"; break; case "Int32": columnDataType = "INTEGER"; break; case "  Десятичное "://Используйте валюту вместо десятичной из-за ошибки, описанной на странице//http://social.msdn.microsoft.com/Forums/vstudio/en-US/5d6248a5-ef00-4f46-be9d-853207656bcc/localization-trouble  -with-oledbparameter-and-decimal? forum = csharpgeneral columnDataType = "CURRENCY"; break;} stringBuilder.AppendFormat ("{0} {1}", tableColumn.ColumnName, columnDataType);} stringBuilder.Append (")")  ;  вернуть stringBuilder.ToString ();  }}  


используйте следующий класс

  using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data; using excel = Microsoft.Office.Interop.Excel; using EL =  ExcelLibrary.SpreadSheet; using System.Drawing; using System.Collections; using System.Runtime.InteropServices; using System.Windows.Forms; namespace _basic {public class ExcelProcesser {public void WriteToExcel (System.Data.DataTable dt) {excel.Application  XlObj = новое приложение excel.Application ();  XlObj.Visible = false;  excel._Workbook WbObj = (excel.Workbook) (XlObj.Workbooks.Add (""));  excel._Worksheet WsObj = (excel.Worksheet) WbObj.ActiveSheet;  объект misValue = System.Reflection.Missing.Value;  попробуйте {int row = 1;  int col = 1;  foreach (столбец DataColumn в dt.Columns) {//добавление столбцов WsObj.Cells [row, col] = column.ColumnName;  col ++;  }//сбрасываем переменные столбца и строки col = 1;  row ++;  for (int i = 0; i 

                          

}


Это решение в основном отправляет данные List в Excel. Для этого используется DataTable. Я реализовал метод расширения, поэтому в основном есть две вещи нужный. 1. Метод расширения.

  открытый статический класс ReportHelper {общедоступная статическая строка ToExcel  (это данные IList ) {PropertyDescriptorCollection properties = TypeDescriptor.  GetProperties (typeof (T));  Таблица DataTable = новый DataTable ();  foreach (свойство PropertyDescriptor в свойствах) {//table.Columns.Add(prop.Name, Nullable.GetUnderlyingType (prop.PropertyType) ?? prop.PropertyType);  if (prop.Attributes [typeof (FGMS.Entity.Extensions.ReportHeaderAttribute)]! = null) {table.Columns.Add (GetColumnHeader (prop), Nullable.GetUnderlyingType (prop.PropertyType) ?? prop.PropertyType);  }}//Кажется, что когда есть только одна строка данных, заголовки не отображаются//поэтому добавление фиктивной пустой строки, которая устранила проблемы//Добавить пустую строку - Проблема # 1471 DataRow blankRow = table.NewRow (  );  table.Rows.Add (blankRow);  foreach (элемент T в данных) {DataRow row = table.NewRow ();  foreach (PropertyDescriptor prop в свойствах)//row[prop.Name] = prop.GetValue (item) ??  DBNull.Value;  if (prop.Attributes [typeof (FGMS.Entity.Extensions.ReportHeaderAttribute)]! = null) {row [GetColumnHeader (prop)] = prop.GetValue (item) ??  DBNull.Value;  } table.Rows.Add (строка);  } table.TableName = "Результаты";  var filePath = System.IO.Path.GetTempPath () + «\» + System.Guid.NewGuid (). ToString () + «.xls»;  table.WriteXml (путь к файлу);  return filePath;  } частная статическая строка GetColumnHeader (PropertyDescriptor prop) {return ((FGMS.Entity.Extensions.ReportHeaderAttribute) (prop.Attributes [typeof (FGMS.Entity.Extensions.ReportHeaderAttribute)])). ReportHeaderText;  }}  
  1. Украсьте классы DTO атрибутом [ReportHeaderAttribute ("Имя столбца")]
  открытый класс UserDTO {public int Id {get;  набор;  } public int SourceId {получить;  набор;  } публичная строка SourceName {получить;  набор;  } [ReportHeaderAttribute ("Тип пользователя")] общедоступная строка UsereType {get;  набор;  } [ReportHeaderAttribute ("Address")] публичная строка Address {get;  набор;  } [ReportHeaderAttribute ("Возраст")] public int Age {get;  набор;  } public bool IsActive {получить;  набор;  } [ReportHeaderAttribute ("Active")] общедоступная строка IsActiveString {получить {вернуть IsActive?  "Да нет";  }}}  

Все, что должно быть столбцом в Excel, должно быть украшено [ReportHeaderAttribute ("Имя столбца")]

Then Simply

  Var userList = Service.GetUsers ()//Возвращает список UserDTO; var excelFilePath = userList.ToExcel (); HttpResponseMessage result  = новый HttpResponseMessage (HttpStatusCode.OK);  var stream = new FileStream (excelFilePath, FileMode.Open);  result.Content = new StreamContent (поток);  result.Content.Headers.ContentType = new MediaTypeHeaderValue ("application/vnd.ms-excel");  result.Content.Headers.ContentDisposition = новый ContentDispositionHeaderValue ("вложение") {FileName = "UserList.xls"};  вернуть результат;  

1


Чтобы экспортировать данные в Excel, вы можете использовать библиотеку ClosedXML.Report (https://github.com/ClosedXML/ClosedXML.Report). Поверьте, это замечательная библиотека, и ей легко пользоваться. Библиотеке не требуется взаимодействие с Excel. ClosedXML.Report создает файл Excel на основе шаблона, который можно создать в Excel с использованием любого форматирования. Например:

  var template = new XLTemplate (@ ".  Templates  report.xlsx");  используя (var db = new DbDemos ()) {var cust = db.customers.LoadWith (c => c.Orders) .First ();  template.AddVariable (cust);  template.Generate ();  } template.SaveAs (outputFile);  


  Private tmr As System.Windows.Forms.TimerPrivate Sub TestExcel () обрабатывает Button1.Click '//Исходные данные: таблица SQL Server с 6 столбцами и 293000 строками.  '//Таблица данных, содержащая все данные Dim dt As New DataTable ("F161")'//Создание соединения Dim conn As New SqlConnection ("Server = MYSERVER; Database = Test; Trusted_Connection = Yes;") Dim fAdapter As New SqlDataAdapter With  {.SelectCommand = New SqlCommand ($ "SELECT * FROM dbo.MyTable", conn)} '//Заполняем таблицу данных fAdapter.Fill (dt)'//Создаем приложение Excel Dim xlApp как новое приложение Excel.Application с {. Visible = True} '//Временно отключить обновление экрана xlApp.ScreenUpdating = False'//Создать новую книгу Dim xlBook As Excel.Workbook = xlApp.Workbooks.Add () Dim xlSheet As Excel.Worksheet = DirectCast (xlBook.Sheets (  1), Excel.Worksheet) '//Получить количество строк Dim rows_count = dt.Rows.Count'//Получить количество столбцов Dim cols_count = dt.Columns.Count '//Вот основная идея: после получения данных  '//вам нужно создать массив и перенести его на лист.  '//Почему массив?  '//Потому что это самый быстрый способ перенести данные на лист Excel.  '//Итак, у нас есть две задачи:'//1) Создать массив '//2) Перенести массив на лист'//=====================  ==================================== '//ЗАДАЧА 1: Создать массив'//===  ==================================================  ==== '//Чтобы создать массив, нам нужно знать, что'//объект Excel Range ожидает двумерный массив, нижние границы которого '//обоих измерений начинаются с 1.'//Это означает, что вы можете '  t использовать массив C #.  '//Вам нужно вручную создать такой массив.  '//Поскольку мы уже рассчитали количество строк и столбцов,//мы можем использовать эти числа при создании массива.  Dim arr = Array.CreateInstance (GetType (Object), {rows_count, cols_count}, {1, 1}) '//Заполняем массив For r = 0 To rows_count - 1 For c = 0 To cols_count - 1 arr (r + 1  , c + 1) = dt.Rows (r) (c) Далее Далее '//==============================  =========================== '//ЗАДАЧА 2: Перенести массив на лист'//==========  =============================================== '// Теперь нам нужно перенести массив на лист.  '//Итак, как быстро передать массив на лист?  '//'//САМЫЙ БЫСТРЫЙ СПОСОБ ПЕРЕДАЧИ ДАННЫХ В ЛИСТ - НАЗНАЧЕНИЕ МАССИВА ДЛЯ ДИАПАЗОНА.  '//Мы могли бы, конечно, жестко запрограммировать значения, но свойство Resize'//упрощает эту работу: xlSheet.Range ("A1"). Resize.Resize (rows_count, cols_count) .Value = arr '// Если мы решим выгрузить данные путем итерации по массиву,//это займет МНОГО времени.  '//For r = 1 To rows_count'//For c = 1 To cols_count '//xlSheet.Cells (r, c) = arr (r, c)'//Next '//Next'//Вот время  results: '//1) Назначение массива Range: 3 секунды'//2) Итерация по массиву: 45 минут '//Включите обновление xlApp.ScreenUpdating = True xlApp = Nothing xlBook = Nothing xlSheet = Nothing'//Здесь мы  есть еще одна проблема: '//создание массива заняло много памяти (около 150 МБ).  '//Использование' GC.Collect () 'по неизвестной причине здесь не помогает.  '//Однако, если вы запустите GC.Collect () ПОСЛЕ завершения этой процедуры'//(скажем, нажав другую кнопку и вызвав другую процедуру), '//тогда память будет очищена.  '//Мне было интересно, как избежать создания дополнительной кнопки, чтобы просто освободить память,//поэтому мне пришла в голову идея использовать таймер для вызова GC.  '//Через 2 секунды GC собирает все поколения. '//Не забываем избавляться от таймера, так как он нам нужен только один раз.  tmr = New Timer () AddHandler tmr.Tick, Sub () GC.Collect () GC.WaitForPendingFinalizers () GC.WaitForFullGCComplete () tmr.Dispose () End Sub tmr.Interval = TimeSpan.FromSeconds (2) .TotalMillise  tmr.Start () End Sub  


Чисто образец код (на случай, если это может помочь кому-то с некоторыми идеями) на основе ответа Томаша Висьневского отсюда: https://stackoverflow.com/a/21079709/2717521

MainWindow ExportButton:

  public int counter; public void SaveToExcel (объект-отправитель, RoutedEventArgs e) {counter = 1;  CountChecker ();} public void CountChecker () {строка имя_файла = GlobalStrings.building_house_address;  строка path = Environment.GetFolderPath (Environment.SpecialFolder.Desktop) + "\";  if (CurrentID! = 0) {if (! File.Exists (путь + имя файла + ".xlsx")) {DataGridParts.Export (путь + имя файла);  MessageBoxEx.Show (это, «Shranjeno na namizje»);  } else {if (! File.Exists (path + "\" + filename + "(" + (counter) + ")" + ".xlsx")) {DataGridParts.Export (path + filename + "(" +  (счетчик) + ")");  MessageBoxEx.Show (это, «Shranjeno na namizje»);  } else {counter ++;  CountChecker ();  }}} else {MessageBoxEx.Show (это, «Избран ни нобен наслов!»);  }}  

Класс ExportToExcel:

  с использованием Microsoft.Office.Interop.Excel; с использованием System.Runtime.InteropServices; пространство имен CBUGIS  {общедоступный статический класс ExportToExcel {///
///Экспорт таблицы данных в файл Excel///
/// Исходная таблица данных /// Путь к имени файла результата  public static void Export (this System.Data.DataTable DataTable, string ExcelFilePath = null) {int ColumnsCount;  int RowShift = 5;  ColumnsCount = DataTable.Columns.Count; //загружаем Excel и создаем новую книгу Application Excel = new Application ();  Excel.Workbooks.Add (); //отдельный рабочий лист _Worksheet Worksheet = Excel.ActiveSheet;  Excel.Sheets [1] .Name = "CBUGIS";  Worksheet.Columns.NumberFormat = "@";  Worksheet.Columns.HorizontalAlignment = XlHAlign.xlHAlignLeft;  объект [,] Заголовок = новый объект [3, 1]; //Размер массива if (GlobalStrings.building_alterantive_addresses.Length == 0) {if (GlobalStrings.building_postcode.Length! = 0) {Title [0, 0] = "NASLOV:" + GlobalStrings.building_house_street + "" + GlobalStrings.building_house_number  + GlobalStrings.building_house_id + "," + GlobalStrings.building_postcode + "" + GlobalStrings.building_area;  Заголовок [1, 0] = "K.O .:" + GlobalStrings.building_cadastral_community + ", ŠT.STAVBE:" + GlobalStrings.building_building_number + ", ŠT.PARCELE:" + GlobalStrings. building_plot_number;  } else {Заголовок [0, 0] = "НАСЛОВ:" + GlobalStrings.building_house_street + "" + GlobalStrings.building_house_number + GlobalStrings.building_house_id;  Заголовок [1, 0] = "K.O .:" + GlobalStrings.building_cadastral_community + ", ŠT.STAVBE:" + GlobalStrings.building_building_number + "," + GlobalStrings.building_plot_number;  }} else {if (GlobalStrings.building_postcode.Length! = 0) {Title [0, 0] = "NASLOV:" + GlobalStrings.building_house_street + "" + GlobalStrings.building_house_number + GlobalStrings.building_house_id + "," + GlobalStrings.building_postcode  + "" + GlobalStrings.building_area;  Заголовок [1, 0] = "K.O .:" + GlobalStrings.building_cadastral_community + ", ŠT.STAVBE:" + GlobalStrings.building_building_number + ", ŠT.PARCELE:" + GlobalStrings.building_plot_number;  Заголовок [2, 0] = "GLEJ TUDI:" + GlobalStrings.building_alterantive_addresses;  } else {Заголовок [0, 0] = "НАСЛОВ:" + GlobalStrings.building_house_street + "" + GlobalStrings.building_house_number + GlobalStrings.building_house_id;  Заголовок [1, 0] = "K.O .:" + GlobalStrings.building_cadastral_community + ", ŠT.STAVBE:" + GlobalStrings.building_building_number + ", ŠT.PARCELE:" + GlobalStrings.building_plot_number;  Заголовок [2, 0] = "GLEJ TUDI:" + GlobalStrings.building_alterantive_addresses;  }} Диапазон TitleRange = Worksheet.get_Range ((Диапазон) (Worksheet.Cells [3, 1]), (Диапазон) (Worksheet.Cells [1, 1]));  TitleRange.Value = Название;  TitleRange.Font.Bold = true;  TitleRange.Font.Size = 10;  объект [] Заголовок = новый объект [11]; //Количество столбцов Заголовок [0] = "DEL";  Заголовок [1] ​​= "УДАЛИТЬ";  Заголовок [2] = "CRP";  Заголовок [3] = "ЛАСТНИК";  Заголовок [4] = "НАСЛОВ";  Заголовок [5] = "P.Š";  Заголовок [6] = "OBMOČJE";  Заголовок [7] = "DRŽAVA";  Заголовок [8] = "EMŠO/MAT. ŠT.";  Заголовок [9] = "OPIS";  Заголовок [10] = "ОПОМБА";  Диапазон HeaderRange = Worksheet.get_Range ((Диапазон) (Worksheet.Cells [RowShift, 2]), (Range) (Worksheet.Cells [RowShift, 12]));  HeaderRange.Value = Заголовок;  HeaderRange.Font.Bold = true;  HeaderRange.Interior.Color = System.Drawing.ColorTranslator.ToOle (System.Drawing.Color.LightGray); //DataCells int RowsCount = DataTable.Rows.Count;  объект [,] Cells = новый объект [RowsCount, ColumnsCount];  for (int j = 0; j  1) {Cells [j, i - 2] = DataTable.Rows [j]  [я];  } Диапазон CellRange = Worksheet.get_Range ((Диапазон) (Рабочий лист.Cells [RowShift +1, 2]), (Диапазон) (Worksheet.Cells [RowShift + RowsCount, 12]));  CellRange.Value = Ячейки;  CellRange.Borders.LineStyle = XlLineStyle.xlContinuous;  Worksheet.Columns.NumberFormat = "@";  Worksheet.Columns [1] .ColumnWidth = 0,1;  для (int b = 1; b  1) {Worksheet.Columns [b] .AutoFit ();  }} Worksheet.PageSetup.Orientation = XlPageOrientation. xlLandscape;  Worksheet.PageSetup.TopMargin = 0,5;  Worksheet.PageSetup.BottomMargin = 0,5;  Worksheet.PageSetup.RightMargin = 0,5;  Worksheet.PageSetup.LeftMargin = 0,5; //проверяем путь к файлу if (ExcelFilePath! = null && ExcelFilePath! = "") {Worksheet.SaveAs (ExcelFilePath);  Excel.Quit ();  Marshal.FinalReleaseComObject (Рабочий лист);  Marshal.FinalReleaseComObject (TitleRange);  Marshal.FinalReleaseComObject (HeaderRange);  Marshal.FinalReleaseComObject (CellRange);  Marshal.FinalReleaseComObject (Excel);  } else//путь к файлу не указан {Excel.Visible = true;  }}}}  


Здесь есть несколько умных ответов (Томаш Вишневски, cuongle). Они, кажется, делятся на две категории: либо вам нужна библиотека оболочки/плагина, либо возможная запись данных должна циклически записывать ячейку за ячейкой, строка за строкой. В последнем случае производительность будет медленной, и, возможно, первый не так удобен для такой простой задачи, как экспорт DataTable в Excel. Вот как я это делаю, используя копирование/вставку, которое выполняется намного быстрее (3 миллисекунды для 800 строк, когда я тестировал), но мы должны немного схитрить. Что вам нужно сделать, так это создать скрытую форму с DataGridView внутри на лету. Затем, когда вы выгружаете свой DataTable в их качестве DataSource, вы можете вызвать метод GetClipboardContent класса DataGridView и, наконец, просто поместить его в выбранный диапазон/ячейку на листе Excel. Пример кода:

  private bool FncCopyDataTableToWorksheet (DataTable dt, ExcelUsing.Worksheet destWsh) {Form frm = new Form ();  frm.Size = новый размер (0, 0);  DataGridView dgv = новый DataGridView ();  DataObject obj;  ExcelUsing.Range rng;  int j = 0;  frm.Controls.Add (dgv);  bool result = false;  попробуйте {dgv.DataSource = dt;  dgv.RowHeadersVisible = false;  frm.Show ();  dgv.SelectAll ();  obj = dgv.GetClipboardContent ();  frm.Hide ();  dgv.ClearSelection ();  if (obj! = null) {Clipboard.SetDataObject (объект); //Записываем заголовки foreach (DataGridViewColumn dgvc в dgv.Columns) {if (dgvc.Visible == true) {rng = (ExcelUsing.Range) destWsh.Cells [1, 1 + j];  rng.Value2 = dgvc.Name.ToString ();  j ++;  }} rng = (ExcelUsing.Range) destWsh.Cells [2, 1];  rng.Select ();  destWsh.PasteSpecial (rng, _Missing, _Missing, _Missing, _Missing, _Missing, true);  результат = истина;  } else {результат = ложь;  }} catch (Exception ex) {//Обработка} rng = null;  obj = null;  dgv = null;  frm = ноль;  вернуть результат;  }  



Программирование 1c 8.3 для чтения файла Excel. Бухгалтерская информация

Этот вопрос задал Сергей из Новокузнецка.

Да, конечно май. Рассмотрим, как это сделать, на конкретном примере.. Допустим, у нас есть электронная таблица Excel:

Нам нужно загрузить данные из столбцов «имя» и «полное именование» в каталог «Номенклатура». Давайте немного усложним ситуацию. Допустим, необходимо, чтобы эти данные попали в определенную группу в каталоге.

Давайте создадим группу Крепежные элементы в Справочнике Номенклатуры:

Теперь нам нужно начать обработку «Загрузка данных из табличного документа» (ее можно найти в разделе) .

В меню «Файл» выбираем пункт «Открыть», в открывшемся окне находим файл «LoadDataFrom TabularDocument.epf», запускаем его. Откроется такое окно:

В поле «Режим загрузки» стоит «Загрузить в каталог ». В поле« Тип ссылки »выберите« Номенклатура ». Затем нажмите кнопку« Открыть файл … »(показано стрелкой):

В открывшемся окне выберите тип файла ниже — «Лист Excel (* .xls)»:

и выберите наш файл Excel, из м, который нам нужно скачать.

Мы видим вот такую ​​картинку:

Перейдите на вкладку« Настройки ». В поле «Первая строка данных табличного документа» поставьте — 2 , поскольку в первой строке у нас есть заголовок таблицы и нам не нужно его загружать.
Затем установите «Нумерация столбцов» — «Нумерация столбцов вручную»:

Ставим галочки в строчки «Имя» и «Полное имя», выходим из режима загрузки — «Поиск», устанавливаем номер столбца соответственно 2 и 3 (второй и третий столбцы наших таблиц Excel):

Теперь нам нужно указать, где скачать, в какой папке. Ставим галочку в строке «Родитель», выбираем режим загрузки — «Установить», а в графе «Значение по умолчанию» выбираем нашу группу «Крепежи» из справочника «Номенклатура»:

Осталось выбрать ставку НДС и единицу измерения (если делаем не делайте этого, тогда нам нужно будет установить ручки для каждого элемента в каталоге). Ставим галочки напротив пунктов «Базовая единица измерения» и «Ставка НДС», выбираем режим загрузки — «Установить», в графе «Значение по умолчанию» выбираем «шт» и «18%» соответственно:

Мы закончили настройку. Перейдите на вкладку «Табличный документ» и нажмите кнопку «Контроль заполнения». Программа написала на табло:

Контроль заполнения завершен. Проверено строк: 7
Ячейки с ошибками не обнаружены

Все. Вы можете скачать. Нажмите «Загрузить» в правом нижнем углу. После загрузки проверяем наш справочник номенклатуры. Мы видим вот такую ​​картинку:

В этой статье Я показал на конкретном примере, как вы можете загружать данные из электронной таблицы Excel в справочник по номенклатуре. Это был простой пример. Но кому-то это может показаться крайне сложным.

В любом случае попробуйте сделать что-то подобное, только не экспериментируйте на рабочей базе, сделайте это на демонстрационной базе или на пустой, или сделать предварительную копию архива. Даже если он никогда не пригодится, вы немного улучшите свои навыки и расширите свои пользовательские навыки.

Было бы интересно узнать, был ли этот материал полезен? Если не сложно, напишите свой для этой статьи. Это поможет мне в подготовке материала в будущем.

Этот метод прост. Его суть заключается в том, что у объекта TabularDocument есть методы:

  • Записать (,>) для загрузки данных в файл;
  • Прочтите (,>), чтобы загрузить данные из файла.

Внимание!

Метод Write () доступен как на клиенте, так и на сервере. Метод Read () доступен только на стороне сервера. Помните об этом
при планировании взаимодействия клиент-сервер.

Давайте рассмотрим пример сохранения документа электронной таблицы в файл. Необходимо любым способом создать и заполнить объект TabularDocument, а выгрузка в файл осуществляется всего одной строкой:

TabDoc … Write (FilePath, TabularDocumentFileType. XLSX);

Здесь TabDoc — сгенерированный документ электронной таблицы, Путь к файл — имя файла для загрузки, Тип файла табличного документа.XLSX — формат сгенерированного файла … Поддерживаются следующие форматы Excel:

  • XLS95 — формат Excel 95;
  • XLS97 — формат Excel 97;
  • XLSX — формат Excel 2007.

TabDoc = New TabularDocument;
TabDoc … Читать (Путь к файлу, как читать значения табличного документа.);

Здесь Путь к файлу — путь к скачанному файлу Excel. Метод чтения значений документа электронной таблицы. определяет, как интерпретировать данные, считанные из исходного документа.. Возможные варианты:

  • Value;
  • Text.

Обмен через OLE

Обмен через технологию автоматизации OLE, пожалуй, самый распространенный способ программной работы с файлами Excel. Он позволяет использовать все функции, предоставляемые Excel, но работает медленнее, чем другие методы. Для обмена через OLE необходимо установить MS Excel:

  • На компьютере конечного пользователя, если обмен происходит на стороне клиента;
  • На сервере 1С: Предприятия, если обмен происходит на стороне сервера.

Пример выгрузки :

//Создаем COM-объект
Excel = New COMObject («Excel.Application»);
//Отключаем отображение предупреждений и вопросов
Excel … DisplayAlerts = False;
//Создаем новую книгу
Книга = Excel. Рабочие книги. Add ();
//Размещение на первом листе
Sheet = Book. Worksheets (1);

//Записываем значение в ячейку
Лист … Ячейки (LineNumber, ColumnNumber). Value = Cell Value;

//Сохраняем файл
Book … SaveAs (FileName);

Excel. .. Quit ();
Excel = 0;

Примеры чтения :

//- ВАРИАНТ 1 —

//Создаем COM-объект
Excel = New COMObject («Excel.Application»);
//Открываем книгу
Книга = Excel. Рабочие тетради. Открыть (Путь к файлу);

Лист = Книга. Worksheets (1);

//Закрываем книгу
Book … Close (0);

//Закрываем Excel и освобождаем память
Excel … Quit ();
Excel = 0;

//—— ВАРИАНТ 2 ——

// Открываем книгу
Book = GetCOMObject (Путь к файлу);
//Размещение на нужном листе
Sheet = Book. Worksheets (1);

//Считываем значение ячейки, обычно это цикл обхода ячеек
Значение ячейки = Лист. Ячейки (LineNumber, ColumnNumber). Value;

//Закрываем книгу
Book … Application. Quit ();

Для обхода всех заполненных строк листа Excel вы можете использовать следующие методы:

//- ВАРИАНТ 1 —
Количество строк = Лист. Ячейки (1, 1). SpecialCells (11). Строка;
Для номера строки = 1 По количеству строк Цикл
Значение ячейки = Лист. Ячейки (LineNumber, ColumnNumber). Значение;
Конец цикла;

//—— ВАРИАНТ 2 ——
Номер строки = 0;
До цикла истины
LineNumber = LineNumber + 1;
Значение ячейки = Sheet. Ячейки (LineNumber, ColumnNumber). Значение;
Если значение НЕ заполнено (значение ячейки), то
Прервать;
EndIf;
Конец цикла;

Вместо последовательного обхода всех строк листа вы можете выгружать все данные в массив и работать с ним. Этот подход будет быстрее при чтении больших объемов данных:

Total Columns = Sheet. Ячейки (1, 1). SpecialCells (11). Столбец;
TotalStrings = Лист. Ячейки (1, 1). SpecialCells (11). Строка;

Регион = Лист. Диапазон (Лист. Ячейки (1, 1), Лист. Ячейки (TotalLines, TotalColumns));
Данные = Регион. Ценность. Unload ();

В таблице ниже показаны наиболее популярные свойства и методы для работы с Excel через OLE:

Действие Код Комментарий
Работа с приложением
Настройка видимости окна приложения Excel … Visible = False;
Установка режима отображения предупреждений (отображать/не отображать) Excel … DisplayAlerts = False;
Закрытие приложения Excel … Quit ();
Работа с книгой
Создание новой книги Книга = Excel. Рабочие книги. Добавить ();
Открытие существующей книги Книга = Excel. Рабочие книги. Открыть (FileName);
Сохранение книги Книга … Сохранить как ( FileName);
Закрытие книги Книга … Закрыть (0) ;
Работа с листом
Установка текущего листа Лист = Книга. Рабочие листы (номер листа);
Установка имени Лист … Имя = Имя;
Настройка защиты Лист … Protect ();
Удаление защиты Лист … UnProtect ();
Настройка ориентации страницы Лист … PageSetup. Ориентация = 2; 1 — книжная, 2 — альбомная
Установка левой границы Sheet … PageSetup. LeftMargin = Excel. CentimetersToPoints (Сантиметры);
Установка верхней границы Sheet … PageSetup . TopMargin = Excel. CentimetersToPoints (Сантиметры);
Установка правой границы Sheet … PageSetup . RightMargin = Excel. CentimetersToPoints (Сантиметры);
Установка нижней границы Sheet … PageSetup . BottomMargin = Excel. CentimetersToPoints (Сантиметры);
Работа со строками, столбцами, ячейками
Установка ширины столбца Лист … Столбцы. ColumnWidth = Ширина;
Удалить строку Лист … Строки. Delete ();
Удаление столбца Лист … Столбцы. Delete ();
Удаление ячейки Лист … Ячейки (LineNumber , Номер столбца). Delete ();
Установка значения Лист … Ячейки (LineNumber , ColumnNumber). Значение = Значение;
Объединение ячеек Лист … Диапазон (Лист . Ячейки (RowNumber, ColumnNumber), Sheet.Cells (RowNumber1, ColumnNumber1)). Merge ();
Установка шрифта Лист … Ячейки (LineNumber , Номер столбца). Шрифт. Имя = Название шрифта;
Установка размера шрифта Лист … Ячейки (LineNumber, ColumnNumber). Шрифт. Размер = Размер шрифта;
Установка полужирного шрифта Лист … Ячейки (LineNumber, ColumnNumber). Шрифт. Жирный = 1; 1 — полужирный, 0 — нормальный
Установка курсива Лист … Ячейки (LineNumber, ColumnNumber). Шрифт. Italic = 1; 1 — курсив, 0 — нормальный
Установка подчеркнутого шрифта Лист … Ячейки (LineNumber, ColumnNumber). Шрифт. Underline = 2; 2 — подчеркнутый, 1 — нет

Чтобы узнать, какое свойство нужно Чтобы изменить или какой метод вызвать, вы можете использовать макросы Excel. Если вы записываете макрос с необходимыми действиями, вы можете посмотреть программный код VBA записанного макроса.

Использование COMSafeArray

При выгрузке большого количества данные из 1С в Excel, вы можете использовать объект для ускорения COMSafeArray … Согласно определению из помощника по синтаксису, COMSafeArray является оболочкой объекта над многомерным массивом SafeArray из COM. Позволяет создавать и использовать SafeArray для обмена данными между COM-объектами. Проще говоря, это массив значений, который можно использовать для обмена между приложениями с использованием технологии OLE.

//Создаем COMSafeArray
ArrayCom u003d New COMSafeArray («VT_Variant», TotalColumns, TotalStrings);
//Заполняем COMSafeArray
для строк = 0 по общему количеству строк — 1 цикл
для числа = 0 всего Столбцы — 1 цикл
ArrayCom … SetValue (Количество, страница, значение);
Конец цикла;
Конец цикла;
//Присваиваем значения из COMSafeArray области листа Excel
Лист … Диапазон (Лист. Ячейки (1, 1), Лист. Ячейки (TotalRows, TotalColumns)). Value = ArrayCom;

Обмен через ADO

Файл Excel, обмен которым осуществляется через ADO, представляет собой базу данных, доступ к которой можно получить с помощью запросов SQL. Установка MS Excel не требуется, но должен присутствовать драйвер ODBC, с которым будет осуществляться доступ. Используемый драйвер ODBC определяется путем указания строки подключения к файлу. Обычно необходимый драйвер уже установлен на компьютере.

Обмен через ADO заметно быстрее, чем обмен через OLE, но при выгрузке нет возможности использовать функциональность Excel для форматирования ячеек, разметки страниц , установка формул и т. д.

Пример выгрузки :

Соединение = Новое COMObject («ADODB.Connection»);

Составное … ConnectionString = «

| Источник данных =» + FileName + «;
;
Составное … Open (); //Открываем соединение

//Создаем COM-объект для команды
Command = New COMObject («ADODB.Command»);
Team

//Назначьте текст команды для создания таблицы
Команда … CommandText = «CREATE TABLE [Sheet1] (Column1 char (255), Column2 date, Column3 int, Column4 float)» ;
Команда … Execute (); //Выполняем команду

//Назначаем текст команды для добавления строки таблицы
Команда … CommandText = «INSERT INTO [Sheet1] (Column1, Column2, Column3, Column4) values ​​ u200b u200b u200b u200b u200b (» » ‘,’ 11.08.2017 ‘”,’ 12345 ‘,’ 12345.6789 ‘)»;
Command.Execute ();//Выполняем команду

//Удаляем команду и закрываем соединение
Command = Undefined;
Compound … Close ();
Connection = Undefined;

Для создания нового листа и формирования его структуры вы можете использовать объекты ADOX.Catalog и ADOX.Table … В этом случае код примет вид:

//Создаем COM-объект для работы с книгой
Book = Новый COMObject («ADOX.Catalog»);
Книга … ActiveConnection = Connection;

//Создаем COM-объект для работы со структурой данных на листе
Таблица = Новый объект COMObject («ADOX.Table»);
Таблица … Имя = «Лист1»;
Таблица … Столбцы. Добавить («Столбец 1 «, 202);
Таблица … Столбцы. Добавить («Столбец2», 7);
Таблица … Столбцы. Добавить («Столбец3», 5);
Таблица … Столбцы. Append («Column4», 5);

//Создаем лист с описанной структурой в книге
Книга … Таблицы. Добавить (Таблица);
Таблица = Не определено;
Книга = Не определено;

В приведенном выше примере в методе

Таблица … Столбцы. Append («Column1», 202);

второй параметр определяет тип столбца. Параметр необязательный, вот некоторые значения типа столбца:

  • 5 — adDouble;
  • 6 — adCurrency;
  • 7 — adDate;
  • 11 — adBoolean;
  • 202 — adVarWChar;
  • 203 — adLongVarWChar.

Пример чтения :

//Создаем COM-объект для соединения
Connection = New COMObject («ADODB.Connection»);

//Устанавливаем строку подключения
Compound … ConnectionString = «
| Провайдер = Microsoft.ACE.OLEDB.12.0;
| Источник данных = «+ FileName +»;
| Расширенные свойства = «» Excel 12.0 XML; HDR = ДА «»; «;
Compound … Open ();//Открываем соединение

//Создаем COM-объект для получения выделения
Selection = New COMObject (» ADODB. Recordset «);
Текст запроса =» SELECT * FROM [Sheet1 $] «;

//Выполняем запрос
Пример … Открыть (Текст запроса , Connection);

//Пропустить результат выбора
Еще НЕ Выборка. EOF () Цикл
Значение столбца 1 = Образец. Поля. Элемент («Столбец1» ). Value;//Ссылка по имени столбца
Column2-Value = Sample. Fields. Item (0). Value;//Ссылка на индекс столбца
Sample … MoveNext () ;
Конец цикла;

Образец … Close ();
Образец = Undefined;
Составное … Close ();
Connection = Undefined;

В строке подключения параметр HDR определяет, как будет выглядеть первая строка на листе. воспринимается. Возможные варианты:

  • ДА — первая строка интерпретируется как имена столбцов. Доступ к значениям можно получить по имени и индексу столбца.
  • NO — первая строка обрабатывается как данные. Доступ к значениям возможен только по индексу столбца.

On В приведенных примерах обсуждались некоторые из объектов ADO. Объектная модель ADO состоит из следующих объектов:

  • Connection;
  • Command;
  • Recordset;
  • Запись;
  • Поля;
  • Stream;
  • Ошибки;
  • Параметры;
  • Свойства.

Выгрузить без программирования

Для сохранения данных из 1С в Excel это не всегда желательно прибегать к программированию. Если в режиме Enterprise пользователь может отображать данные, необходимые для загрузки, то их можно сохранить в Excel без программирования.

Чтобы сохранить документ электронной таблицы (например, результат отчета), вы можно вызвать команду главного меню Сохранить или Сохранить как… .

В открывшемся окне нужно выбрать каталог, имя и формат сохраненного файла.

Чтобы сохранить данные из динамических списков (например, списка элементов), вы должны:

  1. Выведите данные в электронную таблицу с помощью команды Дополнительно ⇒ Показать список … ;
  2. Сохраните электронную таблицу в необходимом формате.

16.06.2010

Как в «1С: Бухгалтерия 8 ред.2.0» скачай справочник товаров из файла Excel

Получи доступ к облаку «1С: Фреш» бесплатно на 30 дней!

Довольно часто на практике возникают ситуации, когда необходимо загрузить данные в программу 1С из таблицы Excel, например, для загрузки справочника товаров из прайс-листа или Счета-фактуры из Счета-фактуры поставщика в электронном виде. форму, отправленную по электронной почте.

Необходимость автоматического обмена особенно актуальна, когда количество элементов, которые необходимо ввести, составляет десятки, сотни или даже тысячи, а ручной ввод такого объема данные — довольно кропотливая работа. Некоторым необходимо загружать данные только один раз при запуске программы, другим необходимо постоянно вводить большие объемы данных в связи с технологией их работы.

Естественно, мы хотели бы избежать их напрасной траты энергии и драгоценного времени в наш век электронного документооборота.

В таких случаях многие заказывают соответствующие процедуры у своих собственных программистов, фирм-франчайзи или сторонних разработчиков, но это дополнительные затраты и время.

Что делать, если по разным причинам это невозможно?

Каждому пользователю профессиональной версии 1С: Предприятие 8 уже есть такая обработка! На ITS-диске!

Типичная обработка файла «LoadingDataFrom TabularDocument.epf», расположенного в раздел: «Технологическое обеспечение»> «Методическое обеспечение 1С: Предприятие 8»> «Универсальные отчеты и обработка»>
D: 1CIts EXE \ EXTREPS \ UNIREPS82 \ UploadFromTableDocument

Обратите внимание, начиная с февраля 2010 года на ITS-диске эта обработка для конфигураций на платформе 8.1 находится в другом разделе: «Технологическое обеспечение»> «Методическое обеспечение 1С: Предприятие 8»> «Платформа 1С: Предприятие 8.1»> «Универсальные отчеты и обработка»> «Загрузка данных из табличного документа».
D: 1CIts \ EXE \ EXTREPS \ UNIREPS81 \ UploadFromTableDocument

Обработка от самой компании 1С универсальна и позволяет загружать данные в любые конфигурации на платформе 1С: Предприятие 8, в любые справочники, документы и реестры информации из * .xls (Excel), * .mxl, * .txt, * файлы. dbf.

Возможности обработки очень большие, и в рамках одной статьи охватить все возможные варианты использования невозможно. Рассмотрим только самые распространенные и популярные примеры.

Пример 1. Загрузка справочника товаров в 1С: Бухгалтерия 8 редакции 2.0 из прайс-листа в Excel.
Пример 2. Загрузка справочника товаров в 1С: Управление торговлей 8 из прайс-листа в Excel.
Пример 3. Загрузка справочника физических лиц в 1С: Зарплата и управление персоналом 8 из Excel. (скоро)
Пример 4. Загрузка чека в 1С: Управление торговлей 8 из документа Excel.

  • Прайс-лист в Excel «PriceOnlineChemSnab.xls» — Microsoft Office Excel 97-2003 (.xls)
  • Типичная конфигурация Enterprise Accounting Edition 2.0, выпуск 2.0.12.2, платформа 8.2 (8.2.10.77)
  • Необходимо загрузить наименования товаров и цены в 1С из Excel.

Из Прайс-листа нужно загрузить в 1С справочник товаров: Бухгалтерия 8.

Купить минимальный вариант ЕГО на 1 месяц за 4818 руб.

1. Запускаем программу 1С

2. Чтобы начать обработку, выберите пункт меню «Файл»> «Открыть».

3. В открывшемся окне находим файл обработки, который находится на ITS-диске в каталоге \ 1CIts \ EXE EXTREPS UNIREPS82 \ UploadFromTableDocument

Если вы ранее скопировали файл обработки на свой компьютер, вы можете выбрать его.

Откроется окно

Обратите внимание, что загрузка данных будет осуществляться в два этапа:

Install» Режим загрузки »- Загрузка в каталог

« Просмотр каталога »- Номенклатура

5. Во вкладке «Табличный документ» нажимаем кнопку «Открыть файл», в появившемся окне выбора находим каталог, в котором у нас есть прайс-лист в Excel, из которого мы планируем загружать данные в 1С.

Файл может не отображаться изначально. Установите тип файла на «Excel Sheet (* .xls)»

Выбор нашего файла

Отображаются сведения о карточке товара.

8. Настройка параметров загрузки заголовков

Для удобства установим «Ручную нумерацию столбцов»

На данном этапе интересует только «Имя», поэтому снимаем галочку поля, которые нас пока не интересуют

«Первая строка данных в электронном табличном документе» — смотрим наш прайс-лист, отбрасываем заголовок, данные для загрузки считываются из девятая строка — ставим «9»

«Не создавать новые элементы» — НЕ ставим галочку, опция нужна, если мы планируем менять существующие элементы

Строки «Имя» и «Полное имя» — установите режим загрузки «Поиск» , «Номер столбца табличного документа» — в нашем прайс-листе имя в третьем столбце — ставим «3»

В строке «Имя» ставим галочку в «Поле поиска» «столбец (второй столбец) — программа проверит наличие элемента с таким именем, и если он уже существует, то новый элемент с таким именем не будет создан.

Обратите внимание, что в программе 1С: Бухгалтерия 8 идентификация элементов справочника происходит по имени. Если вы загружаете базу данных, которая больше не пуста, необходим визуальный контроль введенных элементов, чтобы исключить повторный ввод и дублирование элементов.

Это неудобство усугубляется, если вы планируете не просто разовую первоначальную загрузку справочников, а использование такой автоматической загрузки данных в будущем. Из-за разного написания имен использование сокращений, знаков препинания и т. Д. Приведет к появлению повторяющихся элементов.

Для частого использования и большого количества скачиваемых файлов. данных, мы рекомендуем использовать другие программные продукты 1С из линейки 1С: Предприятие 8: «1С: Управление торговлей 8», «1С: Управление малой фирмой 8», «1С: Комплексная автоматизация 8», в которой «Статья» используется props, что позволяет повысить надежность идентификации загруженного элемента и исключить появление дублирующих элементов каталога.

Строка «Родительский» — в столбце «Режим загрузки» «выберите« Установить », в столбце« Значение по умолчанию »выберите папку (номенклатурную группу), в которую мы будем загружать данные из прайс-листа (в нашем случае« Бытовая химия »).

Строка «Базовая единица измерения» — в столбце «Режим загрузки» выбрать » Установить », в столбце« Значение по умолчанию »выберите единицу измерения. элемент (в нашем случае — шт.)

Строка «Ставка НДС» — в нашем случае для всех загружаемых элементов мы устанавливаем НДС 18%, для этого в столбце «Режим загрузки» выбираем «Установить», в столбце «Значение по умолчанию» выбираем «18%».

Если товары идут с другой НДС, который указывается в отдельном столбце загруженного прайс-листа, то в столбце «Режим загрузки» установите «Поиск» и номер соответствующего столбца прейскуранта в «Номер столбца табличного документа».

Строка «Сервис» — в столбце «Режим загрузки» выберите «Установить», в столбце «Значение по умолчанию» выберите «Нет» (в нашем случае все товары являются товарами) .

Мы установили минимальные значения u200b для новинок в справочнике номенклатуры, что позволит вам начать работу.

Чтобы закрыть месяц, alloca т. е. затрат, сформировать бухгалтерскую и налоговую отчетность, потребуется установить значения «Группа позиций» и «Статья затрат», для ввозимых товаров установить «Страна происхождения» и «Номер ГТД», но это можно сделать. позже с помощью групповой обработки.

Если вы готовы установить значения этих деталей сейчас, укажите.

Нажмите «Загрузить» в правом нижнем углу. углу нажмите «Да» на вопрос

8. Проверьте наличие новинок в соответствующей группе справочника номенклатуры.

9. Откройте карточку товара, проверьте правильность загрузки деталей

Если все верно, то можно переходить ко второму этапу — загрузке цен из прайс-листа в Excel.

Если в будущем вы планируете использовать эту процедуру загрузки данных с такими же настройками параметров загрузки, мы рекомендуем вам сохранить текущие настройки. Для этого нажмите кнопку «Сохранить настройки» и четко назовите текущую настройку, например, «Загрузка названий продуктов из прайс-листа Excel».

В «Корпоративном учете» версии 2.0 цены устанавливаются с использованием документа «Установка цен на товары».

11. Установите «Режим загрузки» — «Загрузить в табличный раздел».

Откроется журнал документов «Установка цен на товары».

Здесь вы можете выбрать существующий документ, в который мы хотим добавить новые элементы, или создать новый (рекомендуется), в документе мы указываем, какой «Тип цены» мы будем загружать (в нашем примере, «Розничная торговля»).

Нажмите «ОК» и сохраните пока пустой документ.

Теперь выберите этот новый сохраненный документ из журнала в строке «Ссылка».

В поле «Табличная часть», выберите «Продукты»

13. Обратите внимание, что теперь вам нужно перейти на вкладку «Табличный документ» и снова выбрать наш прайс-лист в Excel, из которого мы загрузили имена, и теперь мы загрузим цены (см. Пункт 5).

14. Регулировка параметров загрузки

Снова устанавливаем «Первая строка данных документа электронной таблицы» — как и при загрузке имен, устанавливаем «9»

В строке » Номенклатура »установите режим загрузки« Поиск »,« Номер столбца табличного документа »- в нашем примере установите« 3 »

В строке« Цена »установите режим загрузки« Поиск » , «Номер столбца документа электронной таблицы» — укажите номер столбца с ценами, которые мы хотим загрузить — в нашем случае «4».

В строке« Валюта »установите режим загрузки« Установить », выберите валюту (в примере« Рубль »)

Если в вашем прайс-листе цены товаров указаны в разных валютах, что указано в отдельном столбце загружаемого прайс-листа, то в столбце «Режим загрузки» установите «Поиск» и номер соответствующего столбца прейскуранта в «№ Столбец документа электронной таблицы ».

Нажмите« Загрузить »и ответьте« Да »

15. Откройте документ« Установка цен на товары », в который были загружены данные (нажав кнопку с лупой в разделе« Ссылка » строка)

16. Проверьте документ, если все в порядке, нажмите «ОК».

Цены должны быть фиксированными.

17. Откройте справочник списка акций, проверьте вкладку «Цены» в карточка загруженных товаров.

Если все в порядке , то вы можете начать загрузку остальных цен (оптовая, квитанция и т. д.). Процедура такая же.

Если в будущем вы планируете использовать эти данные Для процедуры загрузки с такими же настройками параметров загрузки мы рекомендуем сохранить текущие настройки. Для этого нажмите кнопку «Сохранить настройки» и четко назовите файл curr Например, «Загрузка розничных цен из прайс-листа Excel».

В следующий раз вы можете загрузить сохраненные настройки, нажав кнопку «Восстановить настройки» и выбрав нужную из списка.

Желаем успехов!

Продолжение следует …

Шавалеев Р.Ф.

Нравится ли вам решение?

84 понравилось

Какие возможности дает загрузка в 1С из Excel?

Благодаря возможностям современного программного обеспечения у вас есть доступ к сервису загрузки любых данных из Excel в 1С.

Зачем это нужно?

  1. Для быстрого переноса накопленных данных в запускается учетная система 1С.
  2. Чтобы избавиться от рутинного обновления цен вручную.
  3. Для быстрой загрузки заказов из интернет-магазина.
  4. Чтобы обезопасить себя от обработки информации внутри 1С, от нежелательных пользователей. Например, аутсорсинговые компании или фрилансеры.
  5. Для быстрого обновления состава номенклатурных позиций.

Посмотрите наше видео, чтобы понять, как можно использовать загрузку данных в 1С в своем бизнесе (при просмотре укажите высокое качество):

Как правильно подготовить данные для загрузки в 1С из Excel?

Если у вас есть данные в формате MS Excel и вы решили перенести их в 1С, то вам необходимо знать следующее:

1. Структура данных должна быть единообразной. Например, если у вас также есть номера телефонов в столбце с фамилией в Excel, вы должны переместить их в отдельное поле (столбец). Одно поле, одна сущность применяется ко всем данным, которые вы собираетесь загрузить.

2. Единый формат данных внутри каждого поля. Программы для загрузки данных в 1С из Excel чувствительны к мельчайшим деталям. Следующие данные с точки зрения машины будут разными:

  • «Шт.» И «шт.». (без точки и с точкой)
  • «Мужчина» и «муж». (различное описание одной сущности — пол)

Перед автоматической загрузкой данных необходимо убедиться, что все идентичные (с человеческой точки зрения) сущности имеют одинаковое описание — формат , иначе эти сущности будут загружены в 1С в нескольких версиях.

3. Уникальные идентификаторы для уникальных объектов. Чтобы избежать дублирования данных во время автоматической загрузки данных, необходимо заранее предоставить уникальные идентификаторы. Например, при загрузке данных о товарах таким идентификатором может быть артикул товара, при загрузке контрагентов — юридических лиц ИНН может служить идентификатором, для физических лиц — адрес электронной почты или номер дисконтной карты.

В зависимости от требований задачи существуют разные подходы к интерпретации уникальных идентификаторов, но факт остается фактом — они должны быть!

4. Желательно отсутствие посторонних данных и элементов оформления, не связанных с загрузкой. Эти данные включают в себя служебные комментарии, пустые строки, сноски и т. Д. Элементы.

5. Однозначная структура ячеек. Объединение ячеек в области допустимо при условии, что такое объединение производилось по четкому алгоритму, поддающемуся машинному анализу. Мы не рекомендуем использовать такие объединения для автоматической загрузки данных.

Если у вас есть файл, данные из которого вы хотите загрузить в 1С, просто отправьте его отправьте нам для анализа и мы сообщим вам время и стоимость автоматической загрузки!

Какие данные в принципе можно загрузить из Excel в 1С?

Для автоматической загрузки из Excel в 1С подходят любые данные, если они правильно отформатированы с учетом вышеуказанных принципов.

Примеры включают следующее:

(Имя, контактные данные)

  • Загрузить завершенную информацию о продажах (кому они продали, что они продано, сколько денег получили)
  • (товар, сколько он стоит, для каких категорий покупателей он стоит столько) (кто хочет покупать, что хочет купить, в каком количестве)

  • Загрузить информацию о накопленных скидках (кто накопил, на какую сумму покупок получил скидку, каков процент скидки)
  • Обратите внимание, что это просто примеры. Технически мы можем загрузить любые данные, которые необходимы для решения вашей конкретной задачи.

    Если у вас есть необходимость проанализировать эти данные и затем загрузить их в 1С — свяжитесь с нами! Бесплатно проконсультируем по телефону: 8-926-219-21-60.

    Как происходит загрузка из Excel в 1С? Можно ли написать программу для самостоятельной регулярной загрузки?

    Команда сайта занимается созданием загрузчиков с 2005 года. Накоплен огромный опыт загрузки из Excel в 1С, который позволит позволяют нам написать загрузчик для любых целей:

    1. Одноразовый загрузчик для быстрого решения конкретной проблемы.
    2. Многофункциональный загрузчик для многократного использования.

    Все зависит от ваших целей и задач.

    Если задача срочная, и нет необходимости в регулярном импорте информации в 1С, тогда вам останется только заказать одноразовый загрузчик. Он будет дешевле многофункционального и позволит решить проблему в короткие сроки. В результате работы одноразового загрузчика вы получите необходимую информацию в свою учетную систему вскоре после заказа.

    Разработка многофункционального загрузчика займет больше времени. Все зависит от степени его универсальности и сложности обработки информации.

    Вот так выглядят наши загрузчики:

    Или вот так:

    Вот как наш загрузчик для конфигурации «Управление торговлей» изд. одиннадцать:

    А таких загрузчиков на любую задачу у нас БОЛЬШЕ сотни!

    В любом случае , в зависимости от того, какой загрузчик вам нужен, звоните по телефону 8-926-219-21-60. Мы бесплатно проконсультируем вас и поможем сделать правильный выбор.

    Заинтересовало готовое решение «Загрузка в 1С из Excel»?

    Мы будем рады ответить на ваши вопросы и обсудить детали сотрудничества.

    Нажмите кнопку «Отправить запрос» и мы свяжемся с вами в течение один рабочий день.

Оцените статью
clickpad.ru
Добавить комментарий