понедельник, 20 июля 2015 г.

c# Номер недели в месяце

private int GetWeekOfMonth (DateTime date)
{
    DateTime beginningOfMonth = new DateTime(date.Year, date.Month, 1);

    while (date.Date.AddDays(1).DayOfWeek != System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FirstDayOfWeek)
        date = date.AddDays(1);
    return (int)Math.Truncate((double)date.Subtract(beginningOfMonth).TotalDays / 7f) + 1;
}

среда, 1 июля 2015 г.

C# доступ к сетвой папке по имени пользователя и паролю

using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Principal;
namespace LogonUser
{
    class Class1
    {
        private const int LOGON32_LOGON_INTERACTIVE = 2;
        private const int LOGON32_LOGON_NETWORK_CLEARTEXT = 3;
        private const int LOGON32_PROVIDER_DEFAULT = 0;
        [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
        static extern int LogonUser(string lpszUserName, string lpszDomain, string lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        static extern int DuplicateToken(IntPtr hToken, int impersonationLevel, ref IntPtr hNewToken);
        [STAThread]
        static void Main(string[] args)
        {
            string UserName = "логин к папке";
            string Password = "пароль как папке";
            // Для сохранения текущей имперсонации
            WindowsImpersonationContext impersonationContext = null;
            try
            {
                // Имперсонируем другого пользователя
                WindowsIdentity newIdentity;
                IntPtr token = IntPtr.Zero;
                IntPtr tokenDuplicate = IntPtr.Zero;
                if (LogonUser(UserName, Environment.MachineName, Password,
                    LOGON32_LOGON_NETWORK_CLEARTEXT, LOGON32_PROVIDER_DEFAULT, ref token!= 0)
                {
                    if (DuplicateToken(token, 2, ref tokenDuplicate!= 0)
                    {
                        newIdentity = new WindowsIdentity(tokenDuplicate);
                        // При имперсонации возвращается текущее значение
                        impersonationContext = newIdentity.Impersonate();
                    }
                }
            }
            catch (Exception Ex)
            {
                Console.WriteLine("Ошибка имперсонации пользователя {0}: {1}", UserName, Ex);
            }
            // Новая имперсонация
            WindowsIdentity wi1 = WindowsIdentity.GetCurrent();
            Console.WriteLine("Name={0} --> {1}", wi1.Name, wi1.IsAuthenticated);
            // Действие
            string[] files = Directory.GetFiles(@"\\10.0.0.71\install\");
            Console.WriteLine("--- Files: ---");
            foreach (string name in files)
            {
                Console.WriteLine(name);
            }
            // Возвращаем предыдущую имперсонацию
            if (impersonationContext != null)
                impersonationContext.Undo();
            Console.ReadKey(true);
        }
    }
},

вторник, 10 февраля 2015 г.

Экспорт DataGridView в Excel (путем копирования - вставки)

Подключаем через AddReference "Microsoft.Office.Interop.Excel"

using Excel = Microsoft.Office.Interopt.Excel;

...

private void btnExportToExcel_Click(object sender, EventArgs e)
{
    dgv.SelectAll();

    DataObject dataObj = dgv.GetClipboardContent();

    DataObject dataObject = new DataObject();
    Encoding enc = Encoding.Unicode;
    byte[] bytes = enc.GetBytes(dataObj.GetText());
    System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes);
    dataObject.SetData("UnicodeText", false, stream);
    Clipboard.SetDataObject(dataObject, true);

    Microsoft.Office.Interop.Excel.Application xlexcel;
    Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
    Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet;
    object misValue = System.Reflection.Missing.Value;
    xlexcel = new Excel.Application();
    xlexcel.Visible = true;
    xlWorkBook = xlexcel.Workbooks.Add(misValue);
    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);
    Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1];
    CR.Select();


    xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true);
}

среда, 21 января 2015 г.

Excel Сумма ячеек по цвету

Откройте редактор Visual Basic:
  • В Excel 2003 и старше для этого нужно выбрать в меню Сервис - Макрос - Редактор Visual Basic (Tools - Macro - Visual Basic Editor)
  • В новых версиях Excel 2007-2013 перейти на вкладку Разработчик (Developer) и нажать кнопку Visual Basic. Если такой вкладки у вас не видно, то включите ее в настройках Файл - Параметры - Настройка ленты (File - Options - Customize Ribbon)
В окне редактора вставьте новый модуль через меню Insert - Module и скопируйте туда текст вот такой функции:

Public Function SumByColor(DataRange As Range, ColorSample As Range) As Double
     Dim Sum As Double
     Application.Volatile True

     For Each cell In DataRange
         If cell.Font.Color = ColorSample.Font.Color Then
             Sum = Sum + cell.Value
         End If
     Next cell
     SumByColor = Sum
 End Function

Если теперь вернуться в Excel, то в Мастере функций (Вставка - Функция) в появившейся там категории Определенные пользователем (User Defined) можно найти нашу функцию и вставить ее на лист:


Источник: http://www.planetaexcel.ru/techniques/9/162/

Docker. Первые контейнеры

Источник:  php.dragomano.ru Структура каталогов: ~/develop/web/project/                  nginx/      - сервис web-сервера                php...