Отправка данных в файл Excel с использованием DDE

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

Pinvoke подписи:

[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 А1. Какую функцию DDE я должен использовать для этой задачи?

1 ответ

Вы пытаетесь использовать DDEML, и действительно трудно найти достойные примеры DDEML, потому что многие люди, которым действительно нужно было использовать DDE, делали это напрямую, используя необработанные сообщения Windows. Вы должны будете сначала запустить клиентскую транзакцию, используя DdeClientTransaction, а затем соответствующие API, такие как DdeGetData или DdeAddData, DdeAccessData и т. Д., Чтобы получить или получить данные. Вы можете найти более подробную информацию о DDEML в документации MS здесь.

Но так как вы уже используете C#, я настоятельно рекомендую, чтобы было бы гораздо лучше просто добавить ссылку на Microsoft Excel или библиотеку объектов Office в разделе "Сборки COM" и использовать Microsoft.Office.Interop.Excel;

using Microsoft.Office.Interop.Excel; 
Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application();
Другие вопросы по тегам