Dilan Shaminda Ответов: 1

Отправка данных на лист excel с помощью DDE


Я знаю, что DDE-это старомодная устаревшая технология. Но я создаю приложение C# Windows Form для отправки данных в файл Excel для исследовательских целей. Я использую функции Win32 DDE, и ниже приведено то, что я пробовал до сих пор.

Что я уже пробовал:

[DllImport("user32.dll", EntryPoint = "DdeInitialize")]
public static extern int DdeInitialize(out uint pidInst, IntPtr pfnCallback, IntPtr afCmd, IntPtr ulRes);

[DllImport("user32.dll", EntryPoint = "DdeConnect")]
private static extern IntPtr DdeConnect(uint idInst, IntPtr hszService, IntPtr hszTopic, IntPtr pCC);

[DllImport("user32.dll", EntryPoint = "DdeCreateStringHandle")]
private static extern IntPtr DdeCreateStringHandle(uint idInst, string psz, int iCodePage);

public Form1()
{
    InitializeComponent();
    Process application = new Process();
    application.StartInfo.FileName = @"C:\Users\xxx\Desktop\DDE_Client.xlsx";
    application.Start();
    uint instId;
    DdeInitialize(out instId, application.MainWindowHandle, IntPtr.Zero, IntPtr.Zero);

    IntPtr sPtr = DdeCreateStringHandle(instId, "Excel", 1004);
    IntPtr tPtr = DdeCreateStringHandle(instId, "Sheet1", 1004);

    IntPtr channel = DdeConnect(instId, sPtr, tPtr, (IntPtr)null);
}


DdeConnect возвращает ненулевое значение, которое указывает на успешное соединение.

Мой вопрос:

Как отправить строку в таблицу Excel? Например, я хочу отправить "имя" в ячейку excel A1. Какую функцию DDE я должен использовать для этой задачи?

1 Ответов

Рейтинг:
1

Dilan Shaminda

Я видел этот пост. Но я не смог найти функцию DDESend в списке функций DDEML.
https://docs.microsoft.com/en-us/windows/desktop/dataxchg/dynamic-data-exchange-management-library-functions

Я думаю, что эти функции специфичны для приложения MS Access.

Gerry Schmitz

Похоже, вам нужны "уведомления" (Execute and Poke):

https://docs.microsoft.com/en-us/windows/desktop/dataxchg/dynamic-data-exchange-notifications