Nhiều trường hợp khi mở nhiều Tài liệu Office


9

Bắt đầu với Phiên bản 16.0.8625.2121Office (được kiểm tra bằng Word và Excel) - khi bạn chọn nhiều tài liệu trong Explorer và nhấn Enter để mở chúng, bạn sẽ kết thúc với các phiên bản để đếm số lượng tài liệu đã chọn trước đó.

Để sao chép, hãy thực hiện các bước sau:

  • Tạo 2 sổ làm việc Excel trống ở bất cứ đâu trên máy của bạn
  • Chọn 2 tệp đó
  • Nhấn Enter
  • Kiểm tra TASkmanager và bạn sẽ thấy 2 phiên bản Excel

Trong các phiên bản trước đó, 16.0.8625.2121bạn sẽ chỉ có 1 phiên bản.

Đã thử nghiệm với

  • 16.0.4266.1003 - hình ảnh khá cũ mà chúng tôi có xung quanh hơn là chúng tôi cập nhật lên các phiên bản mới hơn với

    officec2rclient.exe /update user updatetoversion=16.0.xxxx.yyyy
    

Thử nghiệm lại từng bước với các bản dựng mới:

  • 16.0.8431.2094
  • 16.0.8431.2107
  • 16.0,8528,2139
  • 16.08528,2147

Trước khi rõ ràng được đề cập, DisableMergeInstancekhông được thiết lập.

Đó là một "tính năng" mới hay một lỗi? Tôi tin rằng đó là một lỗi.

Có cách nào xung quanh nó?

Thêm thông tin:

Chúng tôi đã thử nghiệm hành vi này với (luôn là phiên bản mới nhất)

  • Windows 7 + Office 2016 - xảy ra hành vi sai trái
  • Windows 10 + Office 2016 - xảy ra hành vi sai trái

Đồng thời kiểm tra Phiên bản Office cũ hơn để đảm bảo rằng đây là Phiên bản Office 2016

  • Windows 8 + Office 2013 - không xảy ra
  • Windows 7 + Office 2010 - không xảy ra
  • Windows 10 + Office 2010 - không xảy ra
  • Windows 10 + Office 2013 - không xảy ra

Câu trả lời:


6

Tôi xin lỗi nếu tôi nhắc lại các giải thích của mình trong suốt, nhưng tôi thấy vấn đề này rất phức tạp vì vậy tôi đã cố gắng đảm bảo nó theo ngữ cảnh có ý nghĩa với độc giả:

Mặc dù có thể không biết đây là lỗi hay đã được dự định, chúng tôi có thể buộc nó mở trong trường hợp "tương tự" bằng cách sử dụng giao thức Trao đổi dữ liệu động (DDE) bằng cách tạo thông báo DDE thay vì đối số cứng "% 1 "chỉ vào tệp cho trường hợp đó để mở khi thực hiện tệp. (Mặc dù, DDE được sử dụng ngay cả với đối số cứng).

Thông báo DDE, trong trường hợp này, được sử dụng để báo cho chương trình mở tệp. Đối với mỗi tệp được thực thi, nó thực sự tạo ra một thể hiện mới mỗi lần. Nhưng khi giao thức DDE được sử dụng, trước tiên, nó sẽ kiểm tra xem một cá thể đã được tạo chưa và nếu vậy nó sẽ chuyển tiếp thông điệp DDE đến phiên bản đầu tiên được tìm thấy và thoát ra do đó tạo ra ảo tưởng rằng tất cả các tệp mở trong một cá thể vì nó là tức thời.

Suy đoán

Vấn đề của các tệp mở trong nhiều phiên bản có khả năng liên quan đến số lượng một cá thể đã được tải khi một phiên bản khác đang được gọi. Xu hướng giữa chênh lệch thời gian thực hiện của một thể hiện thứ hai là khi thời gian giữa các lần thực thi tăng lên, nó có xu hướng mang lại một thể hiện duy nhất và khi nó giảm có xu hướng sinh ra hai thể hiện. Điều này cho thấy rằng phiên bản đầu tiên phải được tải hoặc "sẵn sàng" để mở một tệp mới trong cùng thể hiện đó nếu một tệp khác được thực thi và nếu không thì nó sẽ tự mở tệp.

Có vẻ như khi đường dẫn tệp được sử dụng làm đối số cho chương trình, nó dường như chỉ đi theo xu hướng này:

  • Lời 2016
  • Excel 2016

Khi được sử dụng làm đối số để tạo các thể hiện ngoài phiên bản đầu tiên nếu phiên bản đầu tiên đã sẵn sàng (hoặc nếu những người không phải là người đầu tiên thấy điều đó đã sẵn sàng), thì phiên bản không phải là lần đầu tiên dường như có thể chuyển đối số dưới dạng tin nhắn DDE sang lần đầu tiên.

Tuy nhiên, nếu chúng tôi thực thi chương trình và sử dụng thông báo DDE để mở tệp, nó dường như tuân theo giao thức DDE ngay lập tức cho dù phiên bản đầu tiên có sẵn sàng chấp nhận thông báo DDE thông qua đối số hay không. Việc phiên bản đầu tiên có sẵn sàng hay không phụ thuộc vào việc người đầu tiên không xem phiên bản đầu tiên là sẵn sàng hay chưa và nếu nó không gửi tin nhắn DDE đến lần đầu tiên, điều này dường như chỉ xảy ra khi nó mở thông qua đối số . Suy đoán của người đầu tiên nhìn thấy lần đầu tiên là không "sẵn sàng" hoặc "không tồn tại" được đề xuất bởi thực tế là các tin nhắn DDE (từ những người không phải là người đầu tiên) được chấp nhận bởi người đầu tiên khi: người đầu tiên không được thực hiện thông qua một phép nối đối số "% 1"; và nó được yêu cầu mở thông qua tin nhắn DDE.

Như suy đoán của tôi là: mã cho các ứng dụng này sử dụng một số phương thức tối nghĩa để xác định xem một thể hiện khác có "sẵn sàng" hay không và nếu vậy thì sẽ sử dụng giao thức DDE khi sử dụng đối số. Điều này dường như sử dụng một phương thức khác với chỉ khi nó nhận được giao thức DDE để xác định xem có nên gửi nó đến một thể hiện khác hay không. Nó sẽ xuất hiện trong hiệu ứng mã giả là:

if(argrument.wasUsed()){
    // Office's obscure condition
    if(Office.thinksInstanceIsReady(anotherInstance)){
        // Use DDE Protocol
        if(anotherInstance.exists()){ // already knew that
            sendDDEmessage(anotherInstance);
            exitThisInstance();
        }
    } else {
        selfFollowDDEmessage(); // Leave open this instance
    }
if(givenDDEMessage()){
    // Use DDE Protocol
    if(anotherInstance.exists()){
        sendDDEmessage(anotherInstance);
        exitThisInstance();
    } else {
        selfFollowDDEmessage();
    }
}

Không có cách nào để nói nếu đây là một lỗi hoặc nó được dự định là tối nghĩa vì một lý do, mà không có các lập trình viên thông báo cho chúng tôi.

Độ phân giải

Chúng tôi muốn điều chỉnh việc thực thi các phần mở rộng tệp nhất định để không còn gửi đường dẫn tệp ("% 1") của tệp đang được thực thi dưới dạng đối số, nhưng nói cho chương trình được thực thi để thực hiện với nội dung của thông báo DDE, trong đó chứa một yêu cầu để mở một tệp, nó sẽ chuyển tiếp nó đến một thể hiện đã tồn tại nếu tồn tại và nếu không sử dụng chính nó. Theo suy đoán, sẽ bỏ qua các yêu cầu tối nghĩa của các ứng dụng này để một trường hợp khác được coi là "sẵn sàng" nếu một đối số cho đường dẫn tệp được sử dụng.

Đây là tất cả các phần mở rộng tệp tương quan với các khóa Class sẽ được thay thế bằng x:

Cho Word

FILEEXT          CLASS NAME (x)
 .doc*           Word.Document.8
 .docm†    Word.DocumentMacroEnabled.12
 .docx*         Word.Document.12
 .dot            Word.Template.8
 .dotm†    Word.TemplateMacroEnabled.12
 .dotx†         Word.Template.12
 .odt        Word.OpenDocumentText.12
 .rtf†             Word.RTF.8
 .wbk             Word.Backup.8
 .wiz             Word.Wizard.8
 .wll             Word.Addin.8

Dành cho Excel

FILEEXT             CLASS NAME (x)
 .csv*                Excel.CSV
 .ods       Excel.OpenDocumentSpreadsheet.12
 .slk                 Excel.SLK
 .xla                Excel.Addin
 .xlam†        Excel.AddInMacroEnabled
 .xld                Excel.Dialog
 .xlk                Excel.Backup
 .xll                 Excel.XLL
 .xlm              Excel.Macrosheet
 .xls*              Excel.Sheet.8
 .xlsb†     Excel.SheetBinaryMacroEnabled.12
 .xlshtml           Excelhtmlfile
 .xlsm†       Excel.SheetMacroEnabled.12
 .xlsx*             Excel.Sheet.12
 .xlt†             Excel.Template.8
 .xlthtml          Excelhtmltemplate
 .xltm†        Excel.TemplateMacroEnabled
 .xltx†             Excel.Template
 .xlw               Excel.Workspace
 .xlxml               Excelxmlss

* Các phần mở rộng tệp quan trọng / phổ biến nhất nên được thực hiện ở mức tối thiểu. Chủ quan.

Phần mở rộng tập tin quan trọng / phổ biến thứ cấp nên được thực hiện ở mức tối thiểu. Chủ quan.

Các danh sách này có thể được sao chép thông qua dòng lệnh: assoc | findstr Wordthay thế Wordbằng tên rút gọn chính thức (phân biệt chữ hoa chữ thường).

Tất cả trong số đó bạn có tùy chọn để làm nếu bạn cảm thấy cần thiết. Nếu bạn càng muốn làm, bạn có thể muốn làm theo các bước có thể lựa chọn mà tôi sẽ cung cấp, điều này sẽ làm giảm công việc cần thiết.

Bạn sẽ làm theo các hướng dẫn sau cho mọi khóa đăng ký bên dưới thay thế xbằng (các) Lớp tương ứng của (các) lựa chọn của bạn:

  • HKEY_CLASSES_ROOT\x\shell\Open
  • HKEY_CLASSES_ROOT\x\shell\OpenAsReadOnly

(Ví dụ HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Open:)

Một lần nữa, OpenAsReadOnlykhóa, có thể tùy chọn, điều này sẽ sẵn sàng khi tệp được thực thi sao cho nó chỉ đọc.

Một biện pháp phòng ngừa nhỏ - một bản sao lưu

Để nhớ tốt nhất các giá trị đăng ký là gì trước khi sửa đổi, bạn có thể muốn nhấp chuột phải vào nhánh chính HKEY_CLASSES_ROOTvà trong menu ngữ cảnh, nhấp vào "Xuất" và lưu Tệp đăng ký vào một vị trí. Trong trường hợp Doc Brown nói "Chúng tôi cần quay lại", bạn chỉ có thể nhập khóa đăng ký bằng cách thực hiện nó và làm theo hướng dẫn.

Ngoài ra, bạn cũng có thể chạy cái này để bạn nhớ những commandgiá trị và tên Class là gì để sửa những lỗi nhỏ với:

assoc>>fileexts.txt có thể được lọc bằng cách sử dụng type fileexts.txt | findstr Word

ftype>>classnames.txt có thể được lọc bằng cách sử dụng type classnames.txt | findstr Word

Hướng dẫn

Chúng phải được tuân theo cho mọi giá trị chính được liệt kê ở trên, như bạn muốn làm.

Nhập vào trình soạn thảo đăng ký yêu thích của bạn hoặc regeditđi đến Lớp bạn muốn sửa đổi.

Nhập vào khóa được gọi command, nhấp chuột phải vào (Default)giá trị và nhấp vào "Sửa đổi" trong menu ngữ cảnh.

Hiện tại thiết lập phải là những gì đã được thực hiện bởi ftype | findstr Word

Thay đổi nó để loại bỏ các đối số trực tiếp ở cuối giá trị, bao gồm cả khoảng trắng, để trở thành:

  • "C:\Program Files\Microsoft Office\Root\Office16\EXCEL.EXE"
    (Đối với Excel 64-bit)
  • "C:\Program Files\Microsoft Office\Root\Office16\WINWORD.EXE"
    (Đối với Word 64-bit)
  • "C:\Program Files (x86)\Microsoft Office\Root\Office16\WINWORD.EXE"
    (Đối với Word 32-bit)
  • "C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE"
    (Đối với Excel 32-bit)

Nhập vào khóa được gọi ddeexec(nếu nó không tồn tại, tạo khóa) bên cạnh commandkhóa, nhấp chuột phải vào (Default)giá trị và nhấp vào "Sửa đổi" trong menu ngữ cảnh và đặt giá trị thành:

  • [REM _DDE_Direct][FileOpen("%1")] - (Đối với Word)
  • [open("%1")] - (Đối với Excel)

Bên dưới ddeexectạo một khóa mới được gọi là topic(nếu nó không tồn tại), nhấp chuột phải vào (Default)giá trị và nhấp vào "Sửa đổi" trong menu ngữ cảnh và đặt giá trị thành system(nếu chưa có).

Sau khi sửa đổi, bạn có thể phải làm mới shell32.dll bằng cách chạy lệnh này với Dấu nhắc lệnh hoặc trình bao nâng cao sau khi tạo các thay đổi này cho sổ đăng ký:

regsvr32 /i shell32.dll

Điều này đã được thử nghiệm trên Windows 10 Office 2016 Phiên bản 16.0.8625.2127

Phím tắt thay thế

Bạn cũng có thể đi tới khóa để mở rộng tệp (chẳng hạn như HKEY_CLASSES_ROOT\.xlsx) và sửa đổi giá trị "(Mặc định)" thành một lớp số ít, cách tiếp cận này, nếu được theo dõi, có thể trỏ nhiều phần mở rộng tệp vào cùng một giá trị Lớp (như Excel.Sheet.12) chỉ phải sửa đổi lớp đó một lần với Thông báo DDE. Nếu bạn làm điều này cũng nên đặt tên lại tất cả các lần lặp lại của tên Class bên trong nhánh đăng ký đó. Tuy nhiên, cách này không được khuyến khích, vì nó có thể dễ dàng bị hỏng và nên được thực hiện nếu bạn thực hiện tất cả các tiện ích mở rộng tệp để tiết kiệm thời gian.

Sidenote:

Đối /osố là một đối số cho các URL, vì vậy không phải là mối quan tâm lớn khi mất chức năng này vì nó hiếm khi được thông qua. Tuy nhiên, nếu bạn muốn, bạn có thể thử và bỏ phần này của đối số khi điều chỉnh các (Default)giá trị.

Tôi đang xem xét để biến đây thành một wiki cộng đồng, vì nó rất đầu cơ và cũng chưa hoàn thành (nếu Word & Excel không phải là những người duy nhất). Hãy bình luận một ý kiến ​​về điều này.


1

Ngoài câu trả lời xuất sắc của @ El8tedN8te, tôi nhận xét rằng đối với Excel, không cần thiết phải sửa đổi ddeexeckhóa đăng ký.

Nó là đủ để đặt giá trị của (Default)mục thành:

"C:\Program Files (x86)\Microsoft Office\Root\Office16\EXCEL.EXE" /dde "%1"

Điều này bằng các thử nghiệm của tôi đảm bảo rằng chỉ có một phiên bản Excel được thực thi.


Đối với tôi, phương pháp này không có tác dụng, nó không chạy trong một trường hợp duy nhất. Tôi đã cố gắng khá nhiều để chứng minh mình sai. Tôi đã khởi động lại, kiểm tra lại Tôi đang sử dụng đúng tên và phần mở rộng của Lớp, lật lại các đối số của bạn và giết "C2R" .exe. Trên thực tế đã làm điều ngược lại, ngay cả khi chúng không được mở đồng thời, đối số phụ đã khiến chúng ở riêng lẻ, được thừa nhận ở đây: social.technet.microsoft.com/Forums/office/en-US/ tựa
El8dN8

@ El8tedN8te: Tôi không biết sự khác biệt giữa hai máy tính của chúng tôi. Có thể trong menu Tệp> Tùy chọn> Nâng cao, trong Chung, tùy chọn "Bỏ qua các ứng dụng khác sử dụng Trao đổi dữ liệu động (DDE)". Liên kết của bạn xác nhận rằng /ddesẽ buộc một trường hợp duy nhất.
harrymc

Tôi không biết liệu mình có bị mê hoặc không khi đọc liên kết đó ... ha ... ha ... Vâng, tôi đã kiểm tra cài đặt đó ... đáng để xem tại sao hành vi của tôi lại khác. Nếu PC của tôi sai, suy đoán của tôi là sai. Tôi có thể hỏi, phiên bản văn phòng của bạn?
El8dN8

@ El8tedN8te: Phiên bản 16.0.8625.2121.
harrymc

Trên máy của tôi, nó cũng không hoạt động, giống như @ El8tedN8te.
Rand ngẫu nhiên

-1

Trong này trang được báo cáo rằng " Không có tùy chọn tương thích MDI trong Excel. "

"MDI" là viết tắt của Giao diện nhiều tài liệu và đã được thay thế bằng SDI (Giao diện tài liệu đơn), do đó không có lỗi. Đây là cách mà Excel hiện hoạt động.

Những gì bạn có thể làm là xoay vòng qua sổ làm việc bằng cách nhấn Ctrl+TABCtrl+Shift+TABđể quay vòng. Nếu bạn muốn, bạn có thể cài đặt các ứng dụng thêm chức năng này vào toàn bộ bộ Office. Kiểm tra hai tùy chọn sau:

Thật không may, tôi không thể kiểm tra các phần mềm này ngay bây giờ.


Điều này không trả lời câu hỏi vì ngay cả liên kết bạn cung cấp cũng nói khi bạn mở hai bảng tính excel lần lượt, "Trên tab Quy trình cuộn xuống cho đến khi bạn thấy Excel.exe. Hãy lưu ý rằng mặc dù bạn đã mở hai lần xuất hiện của Excel, hai sổ làm việc được chứa trong cùng một phiên bản Excel. " Cách OP tạo ra hai trường hợp (có cùng phương thức với Microsoft) mâu thuẫn với tuyên bố rằng "không có tùy chọn tương thích MDI trong Excel" vì nhiều giao diện tài liệu (phiên bản) xuất hiện, không phải trong cùng một thể hiện.
El8dN8

Như @ El8tedN8te đã chỉ ra tôi đang nói về 2 trường hợp (2 quy trình) chứ không phải 2 cửa sổ.
Rand ngẫu nhiên

Tôi muốn sửa nhận xét trước đó của tôi, trích dẫn được cung cấp là thực sự chính xác. Vì vậy, bỏ qua toàn bộ câu cuối cùng của tôi ... về nhận xét cuối cùng của tôi. Tôi đã được tự phụ.
El8dN8

Không sao đâu, @ El8tedN8te. Tôi đã tự hỏi những gì sai trong trích dẫn
m2cit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.