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(); /*As(fullPathAndFilename, Excel.XlFileFormat.xlExcel8, //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);
* */
}
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;
}
}
}
Питання для самоконтролю
1. Опишіть принципи запуску Excel із проектів Delphi
2. Опишіть принципи створення книги Excel на основі шаблону.
3. Опишіть принципи збереження і відкриття книг Excel в проектах Delphi.
4. Опишіть принципи закриття книг Excel та закриття програми Excel в проектах Delphi.
5. Опишіть принцип роботи з аркушами Microsoft Excel. Приклад.
6. Яка команда дозволяє замінити старий текст на аркуші Excel на новий текст? Приклад.
7. Які властивості й методи гнізд ви знаєте для роботи з діапазоном гнізд Excel?
8. Яка властивість дозволяє вводити у чарунку аркуша Excel текст формули? Приклад.
9. Які особливості треба враховувати при введенні формули в чарунку Excel при створенні програм в Delphi?
10. Які властивості використовуються для форматування гнізд на аркуші Excel при створенні програм в Delphi?
Лекція №17
Тема: Документування програмних продуктів. Розробка систем допомоги та підказок у програмах.
Мета: Придбати знання у строренні довідникових систем при розробці програмного забезпечення.
Перелік питань, що розглядаються на лекції:
1. Види довідкових систем
2. Формати довідників
3. Створення довідки у форматі HTML Help
4. Створення контекстної довідки
5. Інтеграція довідкового файлу в додаток