Лабораторна робота №5
Тема: Розробка та інтеграція власних динамічних бібліотек.
Мета: Закріпити теоретичні знання та придбати практичні навички з розробки бібліотечних модулів та програм з їх використанням.
Завдання 1.
1.1 Створити відповідного типу.
1.2 Перемістити у даний проект клас з логуванням даних.
1.3 Скомпілювати проект таким чином, щоб мати вихідні файли *.dll.
Завдання 2.
За основу необхідно взяти додаток, що було розроблено у лабораторній роботі 2-3 (без доданого класу логування).
2.1. Виконати статичне підключення розробленої бібліотеки до проекту та продемонструвати її роботу.
2.2 За допомоги принципів рефлексії типів виконати динамічне підключення бібліотеки та продемонструвати її роботу.
Програма може бути реалізована будь якою мовою програмування, обмеження на категорію проекту не накладається.
Висновки:___________________________________________________________________________________________________________________________________________________________________________ ________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Виконано « » _____________ 2016р викладач _____________________
Група _____________ Студент(ка) ________________________________
Лабораторна робота №6
Тема: Розробка програм з використанням СОМ – об’єктів.
Мета: Закріпити теоретичні знання та придбати практичні навички з розробки програм з використанням СОМ – об’єктів.
Завдання 1.
Відлагодити приклад, що було наведено у лекційному матеріалі.
Приклад класу роботи з Excel на мові С#.
using System;
using System.Drawing;
using System.Globalization;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
namespace SaturnRep
{
public class RepExcel : IDisposable
{
public Excel.Application excelapp;
Excel.Workbooks excelappworkbooks;
Excel.Workbook excelappworkbook;
private Excel.Sheets excelsheets; // лист в екселе
private Excel.Worksheet excelworksheet; // ячейка
private Excel.Range excelcells; // диапазон ячеек
// Конструктор
public RepExcel()
{
excelapp = new Excel.Application();
excelapp.Visible = false;
}
// Деструктор
public void Dispose()
{
// Release COM objects (very important!)
if (excelapp != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelapp);
if (excelappworkbooks != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelappworkbooks);
if (excelappworkbook != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelappworkbook);
if (excelsheets != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelsheets);
if (excelworksheet != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelworksheet);
if (excelcells != null)
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelcells);
excelapp = null;
excelappworkbooks = null;
excelappworkbook = null;
excelsheets = null;
excelworksheet = null;
excelcells = null;
GC.Collect();
ClassReportLog.error("RepExcel", "Dispose OK", 3, true );
// GC.GetTotalMemory(true);
}
//************************************************************************************
// Coхранение книги с заданным именем
public void CreateNewBook(string fullPathAndFilename)
{
try
{
excelapp.SheetsInNewWorkbook = 5;
excelapp.Workbooks.Add(Type.Missing);
excelapp.DisplayAlerts = false;
//Получаем набор ссылок на объекты Workbook (на созданные книги)
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelsheets = excelappworkbook.Worksheets;
//Получаем ссылку на лист 1
excelworksheet = (Excel.Worksheet)excelsheets.get_Item(1);
excelworksheet.Name = "Saturn Data";
excelappworkbook.Saved = true;
excelappworkbook.SaveAs(fullPathAndFilename, Excel.XlFileFormat.xlExcel7, //object FileFormat
Type.Missing, //object Password
Type.Missing, //object WriteResPassword
Type.Missing, //object ReadOnlyRecommended
Type.Missing, //object CreateBackup
Excel.XlSaveAsAccessMode.xlNoChange,//XlSaveAsAccessMode AccessMode
Type.Missing, //object ConflictResolution
Type.Missing, //object AddToMru
Type.Missing, //object TextCodepage
Type.Missing, //object TextVisualLayout
Type.Missing);
excelapp.Workbooks.Close();
excelapp.Quit();
ClassReportLog.info("CreateNewBook " + fullPathAndFilename, "OK", 3, true);
}
catch (Exception ex)
{
ClassReportLog.error("CreateNewBook " + fullPathAndFilename, ex.Message, 3, true);
excelapp.Quit();
Dispose();
}
}
public void OpenBook(string fullPathAndFilename)
{
try
{
excelapp.Workbooks.Open(fullPathAndFilename,
Type.Missing, false, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
ClassReportLog.info( "OpenBook " + fullPathAndFilename, "OK",3,true);
}
catch(Exception ex) { ClassReportLog.error( "OpenBook", ex.Message,3, true);}
}
public void CloseBook()
{
try
{
excelapp.Workbooks.Close();
excelapp.Quit();
ClassReportLog.error( "CloseBook", "OK", 3, true);
}
catch (Exception ex)
{
ClassReportLog.error("CloseBook", ex.Message, 3, true);
}
}
public void Save(string fullPathAndFilename)
{
try
{
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelappworkbook.Saved = false;
excelappworkbook.Save();
}
catch(Exception ex) {
ClassReportLog.error("Save", ex.Message, 3, true);
// MessageBox.Show("Возникла проблема при сохранении файла. " + ex.Message);
}
}
public void SaveAs(string fullPathAndFilename)
{
try
{
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelappworkbook.Saved = true;
excelappworkbook.SaveAs(fullPathAndFilename, Excel.XlFileFormat.xlExcel7, //object FileFormat
Type.Missing, //object Password
Type.Missing, //object WriteResPassword
false, //object ReadOnlyRecommended
Type.Missing, //object CreateBackup
Excel.XlSaveAsAccessMode.xlNoChange,//XlSaveAsAccessMode AccessMode
Type.Missing, //object ConflictResolution
Type.Missing, //object AddToMru
Type.Missing, //object TextCodepage
Type.Missing, //object TextVisualLayout
Type.Missing);
ClassReportLog.info("SaveAs " + fullPathAndFilename, "OK", 3, true);
}
catch(Exception ex)
{
ClassReportLog.error("SaveAs " + fullPathAndFilename, ex.Message, 3, true);
// MessageBox.Show("Возникла проблема при сохранении файла. " + ex.Message);
}
}
public void SetValue(string pageName, string address, string StrValues, string typeValue, bool isBold = false) // "A10", "значение"
{
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelsheets = excelappworkbook.Worksheets;
try
{
excelworksheet = (Excel.Worksheet)excelsheets[pageName];
//MessageBox.Show("Страница найдена");
}
catch(Exception ex) {
ClassReportLog.error("SetValue page - " + pageName + " address - " + address + " Value - " + StrValues, ex.Message, 3, true);
// MessageBox.Show("Страница не найдена");
excelsheets.Add();
excelworksheet = (Excel.Worksheet)excelsheets.get_Item(excelsheets.Count);
excelworksheet.Name = pageName;
}
try
{
excelcells = excelworksheet.get_Range(address, address);
if (typeValue == "double") excelcells.Value2 = Convert.ToDouble(StrValues, CultureInfo.GetCultureInfo("en-US").NumberFormat); //Convert.ToDouble(StrValues);
if (typeValue == "string") excelcells.Value2 = StrValues;
if (isBold) excelcells.EntireRow.Font.Bold = true;
ClassReportLog.info("SetValue page - " + pageName + " address - " + address + " Value - " + StrValues, " OK",3, true);
}
catch (Exception ex)
{
ClassReportLog.error("SetValue page - " + pageName + " address - " + address + " Value - " + StrValues, ex.Message, 3, true);
}
}
public string GetValue(string pageName, string address)
{
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelsheets = excelappworkbook.Worksheets;
excelworksheet = (Excel.Worksheet)excelsheets[pageName];
excelcells = excelworksheet.get_Range(address, address);
return Convert.ToString(excelcells.Value2);
}
public void HidenRow(string pageName, int indexRow)
{
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelsheets = excelappworkbook.Worksheets;
//Получаем ссылку на лист
excelworksheet = (Excel.Worksheet)excelsheets[pageName];
excelworksheet.Range["A"+Convert.ToString(indexRow),"A"+Convert.ToString(indexRow)].Rows.Hidden = true;
}
public void DisplayLine(string pageName, int indexRow)
{
excelappworkbooks = excelapp.Workbooks;
//Получаем ссылку на книгу 1 - нумерация от 1
excelappworkbook = excelappworkbooks[1];
excelsheets = excelappworkbook.Worksheets;
//Получаем ссылку на лист
excelworksheet = (Excel.Worksheet)excelsheets[pageName];
excelworksheet.Range["A" + Convert.ToString(indexRow), "A" + Convert.ToString(indexRow)].Rows.Hidden = false;
}
}
}
Завдання 2.
За основу необхідно взяти додаток, що було розроблено у лабораторній роботі 2-5.
2.1. Інтегрувати розроблений клас у додаток та продемонструвати роботу класу у режимі збереження даних у форматі xlsx та у режимі завантаження даних з файлів даного формату.
2.2. Створити новий проект та виконати наступні дії.
Програмно створити електронну книгу.
Програмно у електронну книгу додати два аркуша «тарифи» та «розрахунки»
На першому аркуші розмістити тарифи за комунальні послуги.
На другому – результати розрахунків. Введення показників повинно здійснюватися з діалогового вікна.
Зберегти результати роботи програми у новому файлі.
Програма може бути реалізована будь якою мовою програмування, обмеження на категорію проекту не накладається.
Висновки:___________________________________________________________________________________________________________________________________________________________________________ ____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
Виконано « » _____________ 2016р викладач _____________________
Група _____________ Студент(ка) ________________________________
