我公司使用U8,由於各種原因BOM未使用起來,導致采購部不得不手工錄入采購單,這些采購單本身有Excel電子格式,如何將這些Excel自動導入到U8呢?考慮到開發接口不可能,那麼就另辟蹊徑,能不能模擬手工錄入呢?
很幸運,這種思路可行。
1、首先向另一個程序寫入值
a.確保當前程序窗體不能獲得焦點
[css]
private const int WS_EX_TOOLWINDOW = 0x00000080;
private const int WS_EX_NOACTIVATE = 0x08000000;
protected override CreateParams CreateParams
{
get
{
CreateParams cp = base.CreateParams;
cp.ExStyle |= (WS_EX_NOACTIVATE | WS_EX_TOOLWINDOW);
cp.Parent = IntPtr.Zero; // Keep this line only if you used UserControl
return cp;
}
}
b.獲得活動單元格所在窗體句柄
[csharp]
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetGUIThreadInfo(uint idThread, ref GUITHREADINFO lpgui);
[DllImport("user32.dll")]
public static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
static extern uint GetWindowThreadProcessId(IntPtr hWnd, out uint lpdwProcessId);
IntPtr hWnd = GetForegroundWindow();
uint processId;
uint threadid = GetWindowThreadProcessId(hWnd, out processId);
GUITHREADINFO lpgui = new GUITHREADINFO();
lpgui.cbSize = Marshal.SizeOf(lpgui);
c.模擬鍵盤輸入值
[csharp] view plaincopy
[DllImport("user32.dll")]
static extern void keybd_event(byte bVk, byte bScan, uint dwFlags, int dwExtraInfo);
keybd_event(keycode["LEFT"], 0, 0, 0);
2、循環讀取Excel,寫入值
本例中,我將鍵值寫入private Dictionary<string, byte> keycode;這樣就可以方便轉換。
[csharp]
keycode = new Dictionary<string, byte>();
keycode.Add("A", 65);
keycode.Add("B", 66);
keycode.Add("C", 67);
keycode.Add("D", 68);
keycode.Add("E", 69);
keycode.Add("F", 70);
keycode.Add("G", 71);
keycode.Add("H", 72);
keycode.Add("I", 73);
keycode.Add("J", 74);
keycode.Add("K", 75);
keycode.Add("L", 76);
keycode.Add("M", 77);
keycode.Add("N", 78);
keycode.Add("O", 79);
keycode.Add("P", 80);
keycode.Add("Q", 81);
keycode.Add("R", 82);
keycode.Add("S", 83);
keycode.Add("T", 84);
keycode.Add("U", 85);
keycode.Add("V", 86);
keycode.Add("W", 87);
keycode.Add("X", 88);
keycode.Add("Y", 89);
keycode.Add("Z", 90);
keycode.Add("0", 48);
keycode.Add("1", 49);
keycode.Add("2", 50);
keycode.Add("3", 51);
keycode.Add("4", 52);
keycode.Add("5", 53);
keycode.Add("6", 54);
keycode.Add("7", 55);
keycode.Add("8", 56);
keycode.Add("9", 57);
keycode.Add(".", 0x6E);
keycode.Add("LEFT", 0x25);
keycode.Add("UP", 0x26);
keycode.Add("RIGHT", 0x27);
keycode.Add("DOWN", 0x28);
keycode.Add("-", 0x6D);
效果圖