Workbooks open format excel

Откройте рабочую книгу.

грамматика

выражение . OpenFileName , UpdateLinks , ReadOnly , Format , Password , WriteResPassword , IgnoreReadOnlyRecommended , Origin , Delimiter , Editable , Notify , Converter , AddToMru , Local , CorruptLoad )

выражениеПредставительWorkbooksПеременные объекта.

параметры

Имя Обязательно / необязательно Тип данных объяснение
FileName опциональный Variant String. Имя файла рабочей книги, которую нужно открыть.
UpdateLinks опциональный Variant Укажите способ обновления внешних ссылок (ссылок) в файле, например, следующую формулу = SUM ([Budget.xls] Year! C10: C25) ссылка на определенную область в книге Budget.xls Если этот параметр не указан, пользователю предлагается указать метод обновления ссылки. Дополнительные сведения о значении, используемом для этого параметра, см. В разделе «Описание». Если Microsoft Excel открывает файл в формате WKS, WK1 или WK3, а параметр UpdateLinks равен 0, диаграмма не будет создана, в противном случае Microsoft Excel создаст диаграмму на основе графика, прикрепленного к файлу.
ReadOnly опциональный Variant Если True, книга открывается в режиме только для чтения.
Format опциональный Variant Если Microsoft Excel открывает текстовый файл, этот параметр указывает разделитель. Если этот параметр не указан, используется текущий разделитель. Дополнительные сведения о значении, используемом этим параметром, см. В разделе «Примечания».
Password опциональный Variant Строка, содержащая пароль, необходимый для открытия защищенной книги. Если этот параметр пропущен и в рабочей книге задан пароль, пользователю предлагается ввести пароль.
WriteResPassword опциональный Variant Строка, содержащая пароль, необходимый для записи в защищенную книгу. Если этот параметр пропущен и в рабочей книге задан пароль, пользователю предлагается ввести пароль.
IgnoreReadOnlyRecommended опциональный Variant Если этоTrue, Затем запретите Microsoft Excel отображать сообщение с предложением только для чтения (если рабочая книга«Рекомендуется только для чтения»Вариант сохранения).
Origin опциональный Variant Если файл является текстовым файлом, этот параметр используется для указания источника файла для правильного сопоставления кодовой страницы и возврата каретки / перевода строки (CR / LF)). Может быть следующимXlPlatformОдна из констант:xlMacintosh 、 xlWindowsилиxlMSDOS, Если этот параметр не указан, используется текущая операционная система.
Delimiter опциональный Variant Если файл является текстовым файлом, а параметр Format равен 6, этот параметр является строкой, которая указывает символ, используемый в качестве разделителя. Например, вы можете использоватьChr(9)Обозначает символ табуляции, используйте «,» для запятой, используйте «;» для точки с запятой или используйте пользовательский символ. Используется только первый символ строки.
Editable опциональный Variant Если файл является надстройкой Microsoft Excel 4.0, этот параметрTrueВы можете открыть надстройку, чтобы сделать ее видимой. Если этот параметрFalseЕсли он опущен, надстройка открывается в скрытом режиме и не может быть видна. Этот параметр нельзя применить к надстройкам, созданным в Microsoft Excel 5.0 или более поздней версии. Если файл является шаблоном Excel, а значение параметра «True», указанный шаблон будет открыт для редактирования. Когда значение параметра равно «Ложь», новую книгу можно открыть в соответствии с указанным шаблоном. Значением по умолчанию является «Ложь».
Notify опциональный Variant Когда файл не может быть открыт в режиме чтения-записи, если этот параметрTrueВы можете добавить файл в список уведомлений файла. Microsoft Excel откроет файл в режиме «только для чтения», опросит список уведомлений и уведомит пользователя, когда файл будет доступен. Если этот параметрFalseЕсли оно опущено, уведомление не запрашивается, и любые недоступные файлы не могут быть открыты.
Converter опциональный Variant Индекс первого конвертера файлов, который нужно попробовать при открытии файла. Указанный конвертер файлов пробуется в первую очередь, если конвертер не распознает файл, все остальные конвертеры будут опробованы. Конвертер индекс поFileConvertersНомер строки конвертера, возвращаемый атрибутом.
AddToMru опциональный Variant Если этоTrueЗатем добавьте книгу в список недавно использованных файлов. Значением по умолчанию являетсяFalse 。
Local опциональный Variant Если этоTrue», Файл сохраняется на языке Microsoft Excel (включая настройки панели управления). Если этоFalse(По умолчанию), сохраните файл на языке Visual Basic для приложений (VBA) (VBA обычно является версией на английском языке для США, если проект VBA, из которого выполняется Workbooks.Open, не является старым международным проектом VBA XL5 / 95).
CorruptLoad опциональный XlCorruptLoad Может быть одной из следующих констант:xlNormalLoad 、 xlRepairFileиxlExtractData, Если значение не указано, поведение по умолчаниюxlNormalLoad, И не пытайтесь восстановить состояние при запуске через ОМ.

Возвращаемое значение

Представитель открытой рабочей книгиWorkbookОбъект.

комментарий

По умолчанию макросы включаются при открытии файлов программно. использованиеAutomationSecurityАтрибуты могут устанавливать режим безопасности макросов, используемый при программном открытии файлов.

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

значение смысл
0 Внешние ссылки (ссылки) не обновляются при открытии книги.
3 Обновлять внешние ссылки (ссылки) при открытии книги.

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

значение сепаратор
1 тег
2 запятая
3 пустой
4 точка с запятой
5 нет
6 Пользовательские символы (см.DelimiterПараметр)

примеров

В следующем примере кода открывается книга Analysis.xls, а затем запускается ее макрос Auto_Open.

Workbooks.Open "ANALYSIS.XLS" 
ActiveWorkbook.RunAutoMacros xlAutoOpen

Пример кода провайдера: Bill Jelen, MrExcel.com

В следующем примере кода импортируется лист из другой книги в новый лист в текущей книге. Лист 1 текущей рабочей книги должен содержать путь к книге, которую нужно импортировать в ячейку D3, имя файла в ячейке D4 и имя листа в ячейке D5. Импортированный лист будет вставлен после Листа 1 в текущую книгу.

Sub ImportWorksheet() 
    ' This macro will import a file into this workbook 
    Sheets("Sheet1").Select 
    PathName = Range("D3").Value 
    Filename = Range("D4").Value 
    TabName = Range("D5").Value 
    ControlFile = ActiveWorkbook.Name 
    Workbooks.Open Filename:=PathName &; Filename 
    ActiveSheet.Name = TabName 
    Sheets(TabName).Copy After:=Workbooks(ControlFile).Sheets(1) 
    Windows(Filename).Activate 
    ActiveWorkbook.Close SaveChanges:=False 
    Windows(ControlFile).Activate 
End Sub

Трансфер из:https://msdn.microsoft.com/zh-cn/VBA/Excel-VBA/articles/workbooks-open-method-excel 

Время на прочтение
7 мин

Количество просмотров 69K

В современном мире разработки приложений нередко встает необходимость работы с Excel документами. Чаще всего это разного рода отчеты, но иногда xls/x файлы используются в качестве хранилища данных. Например, если пользователь должен иметь возможность загрузить данные в приложение или выгрузить, в человеко-читаемом виде, Excel де-факто является стандартом. Относительно дружелюбный интерфейс, прозрачная структура, в купе с его распространенностью… трудно навскидку назвать решение лучше.

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

Историческая справка

Времена, когда доминировал проприетарный формат .xls(Excel Binary File Format) давно прошли и сейчас мы имеем только .xlsx(Excel Workbook), в рамках Office Open XML. Последний представляет собой обычный .zip архив с XML файлами. Не будем углубляться в его структуру, я искренне надеюсь что вам это никогда не понадобится.

На github, и не только, можно найти ряд библиотек, бесплатных и не только. Пожалуй самой популярной является EPPlus. До определенной степени, она довольно хорошо отражает концепцию Excel, именно по этому я всегда использую EPPlus. Версия 4 полностью бесплатна, начиная с 5‐й версии вам потребуется приобрести лицензию для коммерческого использования.

Задача

Итак, предположим, продукт-мэнеджеру ударила в голову идея того, что возможность выгружать некий отчет в формате Excel увеличит кол-во пользователей на 100500%. Проджет-менеджер решает выкатить эту киллер-фичу как хотфикс прямо сегодня — ведь работы всего на пару часов.

Сам по себе, отчет содержит краткое описание компании и историю изменения некоторых экономических показателей. Для простоты все свойства компании — строки. Экономические показатели — большие целые числа и числа с плавающей точкой, а также даты. Предположим, что где-то в недрах микросервисного backend-да есть сервис-генератор подобных отчетов, например по id компании. Однако, поскольку id нет смысла выводить пользователю, идентификатор отсутствует в самой модели отчета.

Аналитик, в свою очередь, выдает задачу с феноменально точным описанием — «Сгенерировать excel отчет на базе данных MarketReport». Что ж, для нашего примера, создадим заглушку — генератор фейковых данных:

Первый запуск

Подключим EPPlus версии 4.5.3.3 и создадим базовую обвязку для будущего генератора.

Сердцем генератора будет метод Generate. ExcelPackage это модель документа, через которую мы и будем осуществлять все взаимодействия с ним. Также имеется конструктор для передачи пути к файлу или потока.

В методе main создается генератор отчетов, а также генератор Excel файлов. Далее полученный файл просто записывается на диск.

При попытке запустить приложение, получаем exception:InvalidOperationException: The workbook must contain at least one worksheet

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

var sheet = package.Workbook.Worksheets    
		.Add("Market Report");

Запускаем снова и… вот оно! Теперь наше приложение генерирует документ и, хотя там еще ничего нет, он уже весит 2,5KB — значит мы работаем с Excel правильно и все идет как надо.

Вывод данных

Давайте выведем основную информацию по компании в шапку. Для доступа к конкретной ячейки объект Cells на странице пакета снабжен удобным индексатором. При этом, до конкретной ячейки можно достучаться как через номер строки и столбца, так и по привычному всем буквенно-числовому коду:

sheet.Cells["B2"].Value = "Company:";
sheet.Cells[2, 3].Value = report.Company.Name;

Полный код вывода шапки.

sheet.Cells["B2"].Value = "Company:";
sheet.Cells[2, 3].Value = report.Company.Name;
sheet.Cells["B3"].Value = "Location:";
sheet.Cells["C3"].Value = $"{report.Company.Address}, " +
  												$"{report.Company.City}, " +                          
  												$"{report.Company.Country}";
sheet.Cells["B4"].Value = "Sector:";
sheet.Cells["C4"].Value = report.Company.Sector;
sheet.Cells["B5"].Value = report.Company.Description;

Для вывода исторических данных понадобится как минимум шапка таблицы и цикл по массиву History:

sheet.Cells[8, 2, 8, 4].LoadFromArrays(new object[][]{ new []{"Capitalization", "SharePrice", "Date"} });
var row = 9;
var column = 2;
foreach (var item in report.History)
{
  sheet.Cells[row, column].Value = item.Capitalization;
  sheet.Cells[row, column + 1].Value = item.SharePrice;
  sheet.Cells[row, column + 2].Value = item.Date;    
  row++;
}

Предлагаю обратить внимание на метод LoadFromArrays, который заполняет диапазон ячеек рваным(зубчатым) массивом. Здесь мы можем видеть, что типизация теряется и передавая массив object мы ожидаем что EPPlus в конечном итоге использует ToString, чтобы записать переданное в ячейки.

Стилизация

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

Как это выглядит

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

Да, на все эти красивости у нас уйдет больше года кода, чем на сам вывод данных, и, в конечном тоге, получившаяся каша из логики вывода данных и разметки заставит некоторых усомниться в их компетентности… но, мы же backend разработчики, так давайте сверстаем Excel Sheet!

Размер ячеек

Из коробки у нас есть возможность сделать автофит а так же вручную выставить ширину в соответствии с нашей ситуацией. А ситуация у нас не самая хорошая — по задумке аналитика в шапке у ячеек должен быть автофит, а у ячеек таблицы — тоже автофит. Так в чем же подвох?

Если вы когда-нибудь до этого открывали Excel, то возможно знаете, что ширина ячеек не может отличаться в рамках столбца и автофит будет по самому широкому контенту ячейки. Однако, простые вещи бывает нетак то просто объяснить… Но если вы справитесь, то вот как это будет выглядеть в коде:

sheet.Cells[1, 1, row, column + 2].AutoFitColumns();
sheet.Column(2).Width = 14;
sheet.Column(3).Width = 12;

Формат данных

Как и большая часть стиля ячейки, он задается через одноименное свойство Style. Обратите внимание на вычисление 3-го аргумента индексатора. Это звоночек некачественного кода, но к этому мы вернемся в позже…

sheet.Cells[9, 4, 9 + report.History.Length, 4].Style.Numberformat.Format = "yyyy";
sheet.Cells[9, 2, 9 + report.History.Length, 2].Style.Numberformat.Format =  "### ### ### ##0";

Выравнивание

Его можно задать как на ячейке, так и на диапазоне. На самом деле, для EPPlus, это одна и та же сущность — некий ExcelRange, описывающий диапазон ячеек, в том числе и со всего 1 ячейкой.

sheet.Column(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;
sheet.Cells[8, 3, 8 + report.History.Length, 3].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;

Стиль текста

Также легко задается, используя Style.Font, кстати, здесь, на 2-й строчке, мы впервые указываем диапазон так, как привыкли его видеть пользователи Excel:

sheet.Cells[8, 2, 8, 4].Style.Font.Bold = true;
sheet.Cells["B2:C4"].Style.Font.Bold = true;

Границы

Задаем стиль линии, а также ее толщину. К этому моменту от кол-ва магических чисел-параметров индексатора уже рябит в глазах, но мы уже на финишной прямой… не так ли?

sheet.Cells[8, 2, 8 + report.History.Length, 4].Style.Border.BorderAround(ExcelBorderStyle.Double);
sheet.Cells[8, 2, 8, 4].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;

График

«Ну что за отчет без графиков, верно, Карл?» — ловко подметит специалист по тестированию, и не важно, что этого не было в ТЗ а на часах уже половина 9-го…

Хотя график как сущность сам по себе сложнее таблиц и с графиками мы не работаем каждый день, EPPlus предоставляет довольно понятный API. Давайте добавим простейший график, отражающий рост капитализации:

var capitalizationChart = sheet.Drawings.AddChart("FindingsChart", OfficeOpenXml.Drawing.Chart.eChartType.Line);
capitalizationChart.Title.Text = "Capitalization";
capitalizationChart.SetPosition(7, 0, 5, 0);
capitalizationChart.SetSize(800, 400);
var capitalizationData = (ExcelChartSerie)(capitalizationChart.Series.Add(sheet.Cells["B9:B28"], sheet.Cells["D9:D28"]));
capitalizationData.Header = report.Company.Currency;

Еще, может понадобиться защитить страницу от редактирования:

sheet.Protection.IsProtected = true;

На этом все, репозиторий с рабочим приложением находится здесь.

Заключение

О чем говорит финальная версия метода Generate?

public byte[] Generate(MarketReport report)
{    
  var package = new ExcelPackage();    
  
  var sheet = package.Workbook.Worksheets        
    	.Add("Market Report");      
  
  sheet.Cells["B2"].Value = "Company:";    
  sheet.Cells[2, 3].Value = report.Company.Name;    
  sheet.Cells["B3"].Value = "Location:";    
  sheet.Cells["C3"].Value = $"{report.Company.Address}, " +
    												$"{report.Company.City}, " +                             
    												$"{report.Company.Country}";    
  sheet.Cells["B4"].Value = "Sector:";    
  sheet.Cells["C4"].Value = report.Company.Sector;    
  sheet.Cells["B5"].Value = report.Company.Description;    
  
  sheet.Cells[8, 2, 8, 4].LoadFromArrays(new object[][]{ new []{"Capitalization", "SharePrice", "Date"} });    
  var row = 9;    
  var column = 2;    
  foreach (var item in report.History)    
  {        
    	sheet.Cells[row, column].Value = item.Capitalization;        
   		sheet.Cells[row, column + 1].Value = item.SharePrice;        
   		sheet.Cells[row, column + 2].Value = item.Date;        
    	row++;    
  }    
  
  sheet.Cells[1, 1, row, column + 2].AutoFitColumns();    
  sheet.Column(2).Width = 14;    
  sheet.Column(3).Width = 12;        
  
  sheet.Cells[9, 4, 9+ report.History.Length, 4].Style.Numberformat.Format = "yyyy";    
  sheet.Cells[9, 2, 9+ report.History.Length, 2].Style.Numberformat.Format =  "### ### ### ##0";    
  
  sheet.Column(2).Style.HorizontalAlignment = ExcelHorizontalAlignment.Left;    
  sheet.Cells[8, 3, 8 + report.History.Length, 3].Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;    
  sheet.Column(4).Style.HorizontalAlignment = ExcelHorizontalAlignment.Right;    
  
  sheet.Cells[8, 2, 8, 4].Style.Font.Bold = true;    
  sheet.Cells["B2:C4"].Style.Font.Bold = true;
  
  sheet.Cells[8, 2, 8 + report.History.Length, 4].Style.Border.BorderAround(ExcelBorderStyle.Double);    
  sheet.Cells[8, 2, 8, 4].Style.Border.Bottom.Style = ExcelBorderStyle.Thin;     
  
  var capitalizationChart = sheet.Drawings.AddChart("FindingsChart", OfficeOpenXml.Drawing.Chart.eChartType.Line);    
  capitalizationChart.Title.Text = "Capitalization";    
  capitalizationChart.SetPosition(7, 0, 5, 0);    
  capitalizationChart.SetSize(800, 400);    
  var capitalizationData = (ExcelChartSerie)(capitalizationChart.Series.Add(sheet.Cells["B9:B28"], sheet.Cells["D9:D28"]));    
  capitalizationData.Header = report.Company.Currency;       
  
  sheet.Protection.IsProtected = true;    
  
  return package.GetAsByteArray();
}

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

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

I am trying to convert some VBA code to C#. I am new to C#. Currently I am trying to open an Excel file from a folder and if it does not exist then create it. I am trying something like the following. How can I make it work?

Excel.Application objexcel;
Excel.Workbook wbexcel;
bool wbexists;
Excel.Worksheet objsht;
Excel.Range objrange;

objexcel = new Excel.Application();
if (Directory("C:\csharp\error report1.xls") = "")
{
    wbexcel.NewSheet();
}

else
{
    wbexcel.Open("C:\csharp\error report1.xls");
    objsht = ("sheet1");
}
objsht.Activate();

abatishchev's user avatar

abatishchev

97.3k85 gold badges297 silver badges432 bronze badges

asked Jan 21, 2009 at 11:25

tksy's user avatar

4

You need to have installed Microsoft Visual Studio Tools for Office (VSTO).

VSTO can be selected in the Visual Studio installer under Workloads > Web & Cloud > Office/SharePoint Development.

After that create a generic .NET project and add a reference to Microsoft.Office.Interop.Excel via ‘Add Reference… > Assemblies’ dialog.

Application excel = new Application();
Workbook wb = excel.Workbooks.Open(path);

Missing.Value is a special reflection struct for unnecessary parameters replacement


In newer versions, the assembly reference required is called Microsoft Excel 16.0 Object Library. If you do not have the latest version installed you might have Microsoft Excel 15.0 Object Library, or an older version, but it is the same process to include.

enter image description here

answered Jan 21, 2009 at 15:07

abatishchev's user avatar

abatishchevabatishchev

97.3k85 gold badges297 silver badges432 bronze badges

13

FileInfo fi = new FileInfo("C:\test\report.xlsx");
if(fi.Exists)
{
    System.Diagnostics.Process.Start(@"C:testreport.xlsx");
}
else
{
    //file doesn't exist
}

Community's user avatar

answered Oct 18, 2011 at 21:49

Mennan's user avatar

MennanMennan

4,42112 gold badges53 silver badges86 bronze badges

4

private void btnChoose2_Click(object sender, EventArgs e)
{
  OpenFileDialog openfileDialog1 = new OpenFileDialog();
  if (openfileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
  {
    this.btnChoose2.Text = openfileDialog1.FileName;
    String filename = DialogResult.ToString();

    var excelApp = new Excel.Application();
    excelApp.Visible = true;
    excelApp.Workbooks.Open(btnChoose2.Text);
  }
}

LarsTech's user avatar

LarsTech

80.3k14 gold badges151 silver badges222 bronze badges

answered Jan 28, 2014 at 17:45

Flane's user avatar

FlaneFlane

1111 silver badge3 bronze badges

1

Imports

 using Excel= Microsoft.Office.Interop.Excel;
 using Microsoft.VisualStudio.Tools.Applications.Runtime;

Here is the code to open an excel sheet using C#.

    Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();
    Microsoft.Office.Interop.Excel.Workbook wbv = excel.Workbooks.Open("C:\YourExcelSheet.xlsx");
    Microsoft.Office.Interop.Excel.Worksheet wx = excel.ActiveSheet as Microsoft.Office.Interop.Excel.Worksheet;

    wbv.Close(true, Type.Missing, Type.Missing);
    excel.Quit();

Here is a video mate on how to open an excel worksheet using C# https://www.youtube.com/watch?v=O5Dnv0tfGv4

answered Aug 20, 2016 at 0:39

user1848210's user avatar

0

For opening a file, try this:

objexcel.Workbooks.Open(@"C:YourPathYourExcelFile.xls",
    missing, missing, missing, missing, missing, missing, missing,
    missing, missing, missing, missing, missing,missing, missing);

You must supply those stupid looking ‘missing’ arguments. If you were writing the same code in VB.Net you wouldn’t have needed them, but you can’t avoid them in C#.

answered Jan 21, 2009 at 11:39

Frederick The Fool's user avatar

2

you should open like this

        Excel.Application xlApp ;
        Excel.Workbook xlWorkBook ;
        Excel.Worksheet xlWorkSheet ;
        object misValue = System.Reflection.Missing.Value;

        xlApp = new Excel.ApplicationClass();
        xlWorkBook = xlApp.Workbooks.Open("csharp.net-informations.xls", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

source : http://csharp.net-informations.com/excel/csharp-open-excel.htm

ruden

answered Apr 17, 2013 at 6:23

rudenaggar's user avatar

0

It’s easier to help you if you say what’s wrong as well, or what fails when you run it.

But from a quick glance you’ve confused a few things.

The following doesn’t work because of a couple of issues.

if (Directory("C:\csharp\error report1.xls") = "")

What you are trying to do is creating a new Directory object that should point to a file and then check if there was any errors.

What you are actually doing is trying to call a function named Directory() and then assign a string to the result. This won’t work since 1/ you don’t have a function named Directory(string str) and you cannot assign to the result from a function (you can only assign a value to a variable).

What you should do (for this line at least) is the following

FileInfo fi = new FileInfo("C:\csharp\error report1.xls");
if(!fi.Exists)
{
    // Create the xl file here
}
else
{
    // Open file here
}

As to why the Excel code doesn’t work, you have to check the documentation for the Excel library which google should be able to provide for you.

answered Jan 21, 2009 at 14:57

Mats Fredriksson's user avatar

Mats FredrikssonMats Fredriksson

19.6k6 gold badges36 silver badges57 bronze badges

Microsoft.Office.Interop.Excel.Application excapp;

excapp = new Microsoft.Office.Interop.Excel.Application();

object misval=System.Reflection.Missing.Value;

Workbook wrkbuk = new Workbook();

Worksheet wrksht = new Worksheet();

wrkbuk = excapp.Workbooks._Open(@"C:Users......_template_v1.0.xlsx", misval, misval, 
misval, misval, misval, misval, misval, misval, misval, misval, misval, misval);

wrksht = (Microsoft.Office.Interop.Excel.Worksheet)wrkbuk.Worksheets.get_Item(2);

RememberME's user avatar

RememberME

2,0823 gold badges37 silver badges62 bronze badges

answered Jul 15, 2011 at 10:50

Jairaj's user avatar

Is this a commercial application or some hobbyist / open source software?

I’m asking this because in my experience, all free .NET Excel handling alternatives have serious problems, for different reasons. For hobbyist things, I usually end up porting jExcelApi from Java to C# and using it.

But if this is a commercial application, you would be better off by purchasing a third party library, like Aspose.Cells. Believe me, it totally worths it as it saves a lot of time and time ain’t free.

answered Jan 21, 2009 at 15:29

Tamas Czinege's user avatar

Tamas CzinegeTamas Czinege

118k40 gold badges148 silver badges175 bronze badges

Code :

 private void button1_Click(object sender, EventArgs e)
     {

        textBox1.Enabled=false;

            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Excell File |*.xlsx;*,xlsx";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string extn = Path.GetExtension(ofd.FileName);
                if (extn.Equals(".xls") || extn.Equals(".xlsx"))
                {
                    filename = ofd.FileName;

                    if (filename != "")
                    {
                        try
                        {
                            string excelfilename = Path.GetFileName(filename);


                        }
                        catch (Exception ew)
                        {
                            MessageBox.Show("Errror:" + ew.ToString());
                        }
                    }
                }
            }

Dharmesh Porwal's user avatar

answered Jan 12, 2015 at 6:54

Gaurav Bari's user avatar

For editing Excel files from within a C# application, I recently started using NPOI.
I’m very satisfied with it.

Janus Troelsen's user avatar

answered Apr 4, 2012 at 15:06

bvgheluwe's user avatar

bvgheluwebvgheluwe

8537 silver badges25 bronze badges

Все привет, в этой статье опишу исчерпывающие примеры работы с excel на языке C#.

Для начала работы нам необходимо подключить библиотеку COM как на рисунке ниже:

Для этого добавляем ссылку в проект, надеюсь вы знаете как это делается) Выбираем пункт COM ищем библиотеку Microsoft Excel 16.0 Object Library ставим галочку и жмем Ок.

Далее нам не обходимо для сокращения записи и удобства создать алиас.

using Excel = Microsoft.Office.Interop.Excel;

Теперь нам нужно объявить объект Excel задать параметры и приступать к работе.

//Объявляем приложение

            Excel.Application app = new Excel.Application

            {

                //Отобразить Excel

                Visible = true,

                //Количество листов в рабочей книге

                SheetsInNewWorkbook = 2

            };

            //Добавить рабочую книгу

            Excel.Workbook workBook = app.Workbooks.Add(Type.Missing);

            //Отключить отображение окон с сообщениями

            app.DisplayAlerts = false;

            //Получаем первый лист документа (счет начинается с 1)

            Excel.Worksheet sheet = (Excel.Worksheet)app.Worksheets.get_Item(1);

            //Название листа (вкладки снизу)

            sheet.Name = «Имя должно быть не больше 32сим»;

Пример заполнения ячейки:

           //Пример заполнения ячеек №1

            for (int i = 1; i <= 9; i++)

            {

                for (int j = 1; j < 9; j++)

                    sheet.Cells[i, j] = String.Format(«nookery {0} {1}», i, j);

            }

            //Пример №2

            sheet.Range[«A1»].Value = «Пример №2»;

            //Пример №3

            sheet.get_Range(«A2»).Value2 = «Пример №3»;

Захват диапазона ячеек:

            //Захватываем диапазон ячеек Вариант №1

            Excel.Range r1 = sheet.Cells[1, 1];

            Excel.Range r2 = sheet.Cells[9, 9];

            Excel.Range range1 = sheet.get_Range(r1, r2);

            //Захватываем диапазон ячеек Вариант №2

            Excel.Range range2 = sheet.get_Range(«A1»,«H9» );

Оформление, шрифт, размер, цвет, толщина.

            //Шрифт для диапазона

              range.Cells.Font.Name = «Tahoma»;

              range2.Cells.Font.Name = «Times New Roman»;

            //Размер шрифта для диапазона

              range.Cells.Font.Size = 10;

            //Жирный текст

              range.Font.Bold = true;

            //Цвет текста

              range.Font.Color = ColorTranslator.ToOle(Color.Blue);

Объединение ячеек в одну

  //Объединение ячеек с F2 по K2

    Excel.Range range3 = sheet.get_Range(«F2», «K2»);

    range3.Merge(Type.Missing);

Изменяем размеры ячеек по ширине и высоте

//увеличиваем размер по ширине диапазон ячеек

   Excel.Range range2 = sheet.get_Range(«D1», «S1»);

   range2.EntireColumn.ColumnWidth = 10;

//увеличиваем размер по высоте диапазон ячеек

   Excel.Range rowHeight = sheet.get_Range(«A4», «S4»);

   rowHeight.EntireRow.RowHeight = 50;range.EntireColumn.AutoFit();range.EntireColumn.AutoFit(); //авторазмер

Создаем обводку диапазона ячеек

Excel.Range r1 = sheet.Cells[countRow, 2];

Excel.Range r2 = sheet.Cells[countRow, 19];

Excel.Range rangeColor = sheet.get_Range(r1, r2);

rangeColor.Borders.Color = ColorTranslator.ToOle(Color.Black);

Производим выравнивания содержимого диапазона ячеек.

  Excel.Range r = sheet.get_Range(«A1», «S40»);

  //Оформления

  r.Font.Name = «Calibri»;

  r.Cells.Font.Size = 10;

  r.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;

  r.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;

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

sheet.Cells[countRow, countColumn] = $«=G{countRow}-F{countRow}»;

sheet.Cells[countRow, countColumn].FormulaLocal = $«=ЕСЛИ((H{countRow}*O{countRow})+(I{countRow}*P{countRow})/100<=0;J{countRow}*O{countRow}/100;((H{countRow}*O{countRow})+(I{countRow}*P{countRow}))/100)»;

sheet.Cells[countRow, countColumn] = $«=K{countRow}+N{countRow}-R{countRow}»;

sheet.Cells[33, 22].FormulaLocal = «=СУММ(V3:V32)»;

Добавляем разрыв страницы.

//Ячейка, с которой будет разрыв

Excel.Range razr = sheet.Cells&#91;n, m] as Excel.Range;

//Добавить горизонтальный разрыв (sheet — текущий лист)

sheet.HPageBreaks.Add(razr);

//VPageBreaks — Добавить вертикальный разрыв

Как открыть фаил Excel

app.Workbooks.Open(@»C:UsersUserDocumentsExcel.xlsx»,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing,

  Type.Missing, Type.Missing);

Сохраняем документ Excel

app.Application.ActiveWorkbook.SaveAs(«MyFile.xlsx», Type.Missing,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,

  Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

Завершение работы с объектом Excel.Application

app.Quit();

System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

Пример как выбрать фаил и загрузив его и узнать количество заполненных строк и колонок в одном конкретном листе по имени.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

//поиск файла Excel

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect =false;

            ofd.DefaultExt = «*.xls;*.xlsx»;

            ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»;

            ofd.Title = «Выберите документ Excel»;

            if (ofd.ShowDialog() != DialogResult.OK)

            {

                MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

            string xlFileName = ofd.FileName; //имя нашего Excel файла

            //рабоата с Excel

            Excel.Range Rng;            

            Excel.Workbook xlWB;

            Excel.Worksheet xlSht;

            int iLastRow, iLastCol;

            Excel.Application xlApp = new Excel.Application(); //создаём приложение Excel

            xlWB = xlApp.Workbooks.Open(xlFileName); //открываем наш файл          

            xlSht = xlWB.Worksheets[«Лист1»]; //или так xlSht = xlWB.ActiveSheet //активный лист

            iLastRow = xlSht.Cells[xlSht.Rows.Count, «A»].End[Excel.XlDirection.xlUp].Row; //последняя заполненная строка в столбце А

            iLastCol = xlSht.Cells[1, xlSht.Columns.Count].End[Excel.XlDirection.xlToLeft].Column; //последний заполненный столбец в 1-й строке

Получаем список всех загруженных книг «листов» из файла

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

  //поиск файла Excel

            OpenFileDialog ofd = new OpenFileDialog();

            ofd.Multiselect = false;

            ofd.DefaultExt = «*.xls;*.xlsx»;

            ofd.Filter = «Microsoft Excel (*.xls*)|*.xls*»;

            ofd.Title = «Выберите документ Excel»;

            if (ofd.ShowDialog() != DialogResult.OK)

            {

                MessageBox.Show(«Вы не выбрали файл для открытия», «Внимание», MessageBoxButtons.OK, MessageBoxIcon.Information);

                return;

            }

            string xlFileName = ofd.FileName; //имя нашего Excel файла

Excel.Workbook xlWB = ex.Workbooks.Open(xlFileName);

///загружаем список всех книг

            foreach (object item in xlWB.Sheets)

            {

                Excel.Worksheet sheet = (Excel.Worksheet)item;

            }

Метод Workbook. Open (Excel)

‘\———————————————————————————————————-

Excel поддерживает возможность открытия URL-адреса в качестве другой книги Excel с помощью Workbooks.Open method:

Из MSDN:

Sub OpenUSDRatesPage()

Dim objBK As Workbook

Dim objRng As Range

‘Open the page as a workbook.

Set objBK = Workbooks.Open(«http://www.x-rates.com/tables/USD.HTML»)

‘Find the Canadian Dollar cell.

Set objRng = objBK.Worksheets(1).Cells.Find(«Canadian Dollar»)

‘Retrieve the exchange rate.

MsgBox «The CAD/USD exchange rate is » & objRng.Offset(-6, -1).Value

End Sub

‘\—————————————————————————————————————

Метод Workbook. Open (Excel)

  • 18.05.2019

Открывает книгу.

Синтаксис

Expression. Open (открыть ) (Filename, UpdateLinks, ReadOnly, Format, Password, вритереспассворд, игноререадонлирекоммендед, Origin,- Limit, редактируемый, _Notify _, Converter, аддтомру, Local, корруптлоад)

Expression (выражение ) Переменная, представляющая объект книги .

Параметры

Имя

Обязательный или необязательный

Тип данных

Описание

FileName

Необязательный

Variant

Строка. Имя файла книги, которую необходимо открыть.

UpdateLinks

Необязательный

Variant

Задает способ обновления внешних ссылок (ссылок) в файле (например, ссылки на диапазон в книге бюджет. xls в следующей формуле =SUM([Budget.xls]Annual!C10:C25)). Если этот аргумент не указан, пользователю предлагается указать, как будут обновляться ссылки. Для получения дополнительных сведений о значениях, используемых этим параметром, обратитесь к разделу «Примечания».

Если Microsoft Excel открывает файл в формате WKS, WK1 или WK3, а аргумент UpdateLinks имеет значение 0, диаграммы не создаются; в противном случае Microsoft Excel создает диаграммы на основе диаграмм, вложенных в файл.

ReadOnly

Необязательно устанавливать.

Variant

Значение true, чтобы открыть книгу в режиме только для чтения.

Format

Необязательный

Variant

Если Microsoft Excel открывает текстовый файл, этот аргумент задает символ разделителя. Если этот аргумент не указан, используется текущий разделитель. Для получения дополнительных сведений о значениях, используемых этим параметром, обратитесь к разделу «Примечания».

Password

Необязательный

Variant

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

Вритереспассворд

Необязательный

Variant

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

Игноререадонлирекоммендед

Необязательный

Variant

True , чтобы Microsoft Excel не отображал рекомендуемое только для чтения сообщение (рекомендуется ли книга была сохранена с помощью параметра » только для чтения «).

Основания

Необязательный

Variant

Если файл является текстовым, этот аргумент указывает на то, где он был создан, чтобы страницы кода и возврат каретки/перевод строки (CR/LF) могли быть сопоставлены правильно. Может быть одной из следующих констант кслплатформ : кслмаЦинтош, кслвиндовсили кслмсдос. Если этот аргумент не указан, используется текущая операционная система.

Разделитель

Необязательный

Variant

Если файл является текстовым файлом, а аргумент Format имеет значение 6, этот аргумент представляет собой строку, задающую символ, который будет использоваться в качестве разделителя. Например, используйте Chr (9) для табуляции, используйте «,» для запятых, введите «;» для точки с запятой или используйте специальный символ. Используется только первый символ строки.

Изменяемость

Необязательный

Variant

Если файл является надстройкой Microsoft Excel 4,0, этот аргумент имеет значение true , чтобы открыть надстройку, чтобы она стала видимым окном. Если этот аргумент имеет значение false или опущен, надстройка открывается как скрытая и не может быть скрыта. Этот параметр не применяется к надстройкам, созданным в Microsoft Excel 5,0 или более поздней версии.

Если файл является шаблоном Excel,

имеет значение true , чтобы открыть указанный шаблон для редактирования. Значение false , чтобы открыть новую книгу на основе указанного шаблона. Значение по умолчанию — False.

Уведомления

Необязательный

Variant

Если файл не может быть открыт в режиме чтения и записи, этот аргумент имеет значение true , чтобы добавить файл в список уведомлений о файле. Microsoft Excel откроет файл как доступный только для чтения, опросить список уведомлений о файле, а затем уведомить пользователя, когда файл станет доступен. Если этот аргумент имеет значение false или опущено, уведомления не запрашиваются, а все попытки открыть недоступный файл завершатся ошибкой.

Счет

Необязательный

Variant

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

Аддтомру

Необязательный

Variant

Значение true , чтобы добавить эту книгу в список недавно использовавшихся файлов. Значение по умолчанию — False.

Local

Необязательный

Variant

True — сохраняет файлы на языке Microsoft Excel (включая параметры панели управления). False (ложь ) (по умолчанию) — сохранение файлов на языке Visual Basic для приложений (VBA) (как правило, это английская версия, если проект VBA, в котором запущены книги, не является устаревшим международным проектом XL5/95 VBA).

Корруптлоад

При необходимости

XlCorruptLoad

Может быть одной из следующих констант: кслнормаллоад, кслрепаирфиле и кслекстрактдата. Поведение по умолчанию, если значение параметра не указано, не равно кслнормаллоади не выполняет восстановление при запуске с помощью объектной модели.

Возвращаемое значение

Объект книги , представляющий открытую книгу.

Примечания

По умолчанию при открытии файлов программным способом включаются макросы. Используйте свойство аутоматионсекурити , чтобы задать режим безопасности макросов, используемый при программном открытии файлов.

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

Значение

Описание

нуль

Внешние ссылки (ссылки) не будут обновляться при открытии книги.

4

Внешние ссылки (ссылки) будут обновляться при открытии книги.

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

Значение

Разделитель

1,1

Вкладки

2

Запятыми

4

Бель

SP4

Запятой

17:00

Отсутствует

6

Настраиваемый символ (см. аргумент- Разделитель )

Пример

Следующий пример кода открывает книгу Analysis. xls и выполняет свой макрос Ауто_опен.

VB

Workbooks.Open «ANALYSIS.XLS»

ActiveWorkbook.RunAutoMacros xlAutoOpen

В приведенном ниже примере кода показано, как импортировать лист из другой книги на новый лист в текущей книге. Лист1 в текущей книге должен содержать имя пути к книге, которую необходимо импортировать, в ячейке D3, имя файла в ячейке D4, а имя листа в ячейке D5. Импортированный лист вставляется после Лист1 в текущей книге.

VB

Sub ImportWorksheet()

‘ This macro will import a file into this workbook

Sheets(«Sheet1»).Select

PathName = Range(«D3»).Value

Filename = Range(«D4»).Value

TabName = Range(«D5»).Value

ControlFile = ActiveWorkbook.Name

Workbooks.Open Filename:=PathName & Filename

ActiveSheet.Name = TabName

Sheets(TabName).Copy After:=Workbooks(ControlFile).Sheets(1)

Windows(Filename).Activate

ActiveWorkbook.Close SaveChanges:=False

Windows(ControlFile).Activate

End Sub

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Like this post? Please share to your friends:
  • Workbooks excel visual basic
  • Workbooks add in excel vba
  • Workbook vba excel описание
  • Workbook sheetchange excel vba
  • Workbook range excel vba