标签: office-interop

范围无法删除.在Microsoft.Office.Interop.Word.Range.set_Text(String prop)

用文本替换书签的推荐c#.net代码看起来很直接,我在很多网站上看到了相同的代码(包括你的,从2009年9月的帖子开始)然而,我无法通过错误

范围无法删除.在Microsoft.Office.Interop.Word.Range.set_Text(String prop)

(我在Windows 7和Word 2010 14.0中使用VS 2010).

我的代码:

 private void ReplaceBookmarkText(Microsoft.Office.Interop.Word.Document doc, string bookmarkName, string text)
        {
            try
            {
                if (doc.Bookmarks.Exists(bookmarkName))
                {
                    Object name = bookmarkName;
                    //  throws error 'the range cannot be deleted' 
                    doc.Bookmarks.get_Item(ref name).Range.Text = text;
                }
            }
Run Code Online (Sandbox Code Playgroud)

c# bookmarks office-interop

9
推荐指数
1
解决办法
6474
查看次数

如何使用Microsoft.Office.Interop.Word.Document.PrintOut()将docx打印到特定的打印机

这似乎是一个简单的需求,但由于某种原因,我无法找到如何实现这一目标.我有这样的代码:

Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
MemoryStream documentStream = getDocStream();
FileInfo wordFile = new FileInfo("c:\\test.docx");
object fileObject = wordFile.FullName;
object oMissing = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Document doc = wordInstance.Documents.Open(ref fileObject, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);
doc.Activate();
doc.PrintOut(oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
Run Code Online (Sandbox Code Playgroud)

我需要一个配置设置驱动器,使用哪个打印机和托盘.在搜索之后我发现了Microsoft.Office.Interop.Word.Application.ActivePrinter这是一个可设置的字符串属性,文档中说的是"活动打印机的名称",但我不知道这对打印机来说意味着什么"活动打印机",特别是当我有两个时.如何实现这一目标?

c# ms-word office-interop

9
推荐指数
1
解决办法
2万
查看次数

将文本从word文件复制到新单词

我正在从word文件中读取文本并从readed文本中替换一些文本.

var wordApp = new Microsoft.Office.Interop.Word.Application();
object file = path;

object nullobj = System.Reflection.Missing.Value;

var doc = wordApp.Documents.Open(ref file, ref nullobj, ref nullobj,
                                                 ref nullobj, ref nullobj, ref nullobj,
                                                 ref nullobj, ref nullobj, ref nullobj,
                                                 ref nullobj, ref nullobj, ref nullobj);
 doc.ActiveWindow.Selection.WholeStory();

doc.ActiveWindow.Selection.Copy();

IDataObject data = Clipboard.GetDataObject();
var text =data.GetData(DataFormats.Text);
Run Code Online (Sandbox Code Playgroud)

所以我有来自原始word文件的文本,现在我需要它传递给一个不存在的新word文件(New Text).

我试过了

 ProcessStartInfo startInfo = new ProcessStartInfo();
 startInfo.FileName = "WINWORD.EXE";
 Process.Start(startInfo);
Run Code Online (Sandbox Code Playgroud)

这将打开新的word文件,这个文件没有物理保存在文件系统中,这很好.但我不确定如何将文本值传递给这个新文件.

更新

运行上面的代码后,我尝试了

 var wordApp = new Microsoft.Office.Interop.Word.Application();            
 var doc = wordApp.ActiveDocument;
Run Code Online (Sandbox Code Playgroud)

提出 "此命令不可用,因为没有文档打开."

.net c# ms-word .net-4.0 office-interop

9
推荐指数
2
解决办法
1万
查看次数

c#word interop查找并替换所有内容

我有一些代码来替换单词2010 docx中的文本.

        object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, "document.docx");

        Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true };

        Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true);

        aDoc.Activate();

        Microsoft.Office.Interop.Word.Find fnd = wordApp.ActiveWindow.Selection.Find;

        fnd.ClearFormatting();
        fnd.Replacement.ClearFormatting();
        fnd.Forward = true;

        fnd.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue;

        fnd.Text = "{id}";
        fnd.Replacement.Text = "123456";
        fnd.Execute(Replace: WdReplace.wdReplaceAll);
Run Code Online (Sandbox Code Playgroud)

这没有格式化.但是当{id}被格式化时,它不会替换文本.

如何使此代码忽略格式化?

c# ms-word visual-studio-2010 office-interop office-2010

9
推荐指数
2
解决办法
3万
查看次数

使用Office.Interop将一行添加到MS Word表

我有一个带有表格的单词模板,我从使用制表符分割的字符串列表中填充.

我不知道会有多少行文字,因为它会有所不同.

所以我在迭代循环之前以编程方式添加一行,如下所示:

oWordDoc.Tables[2].Rows.Add(oWordDoc.Tables[2].Rows[1]);
Run Code Online (Sandbox Code Playgroud)

不幸的是,它是在前一行而不是在当前行之后添加行.

如何更改我的代码以在当前行之后添加空行?

c# ms-word office-interop

9
推荐指数
2
解决办法
1万
查看次数

在Windows 10上使用Excel interop无法打开超过11个Excel实例

在C#中使用Excel Interop,在具有16GB内存的Macbook Pro上的Windows 10下,我无法打开超过11个Excel实例.在第11个实例之后,我在"弹出窗口"中收到以下错误:

"不能使用对象链接和嵌入"

这是我使用的代码:

List<Application> apps = new List<Application>();
for (int i = 0; i < 15; i++)
{
    Application a = new Application();
    apps.Add(a);
}
Run Code Online (Sandbox Code Playgroud)

每个Excel进程大约15k的内存,远远超过机器上的16GB内存...

我使用.NET Framework 4.5.2,Windows 10,macbook pro,16GB内存和Excel个人.

c# excel com-interop office-interop

9
推荐指数
1
解决办法
856
查看次数

如何使用word interop一次一个地添加项目到word文档的新行

我试图将这三种类型的内容添加到word doc中.这就是我现在尝试这样做的方式.但是,每个项目都会替换最后一个项目.添加图像始终会添加到页面的开头.我有一个循环调用函数来创建标题和表,然后添加图像.我认为问题是范围.我使用对象start = 0的起始范围;

如何让这些一次添加一个到文档中的新行?

foreach (var category in observedColumns)
            {

                CreateHeadersAndTables();
                createPictures();
            }
Run Code Online (Sandbox Code Playgroud)

添加标题:

                object start = 0;
                Word.Range rng = doc.Range(ref start , Missing.Value);
                Word.Paragraph heading;
                heading = doc.Content.Paragraphs.Add(Missing.Value);
                heading.Range.Text = category;
                heading.Range.InsertParagraphAfter();
Run Code Online (Sandbox Code Playgroud)

添加表格:

            Word.Table table;
            table = doc.Content.Tables.Add(rng, 1, 5);
Run Code Online (Sandbox Code Playgroud)

添加图片:

            doc.Application.Selection.InlineShapes.AddPicture(@path);
Run Code Online (Sandbox Code Playgroud)

.net c# ms-word office-interop

8
推荐指数
1
解决办法
2万
查看次数

无法转换Office Interop Word的COM对象

我的应用程序具有导出到Microsoft Word的功能,但自从我从Microsoft Office 2010升级到Microsoft Office 2013以来它没有用.

这是代码:

Microsoft.Office.Interop.Word.Application appVersion = new Microsoft.Office.Interop.Word.Application();
appVersion.Visible = false;
Run Code Online (Sandbox Code Playgroud)

这是错误消息:

无法将"Microsoft.Office.Interop.Word.ApplicationClass"类型的COM对象强制转换为接口类型"Microsoft.Office.Interop.Word._Application".此操作失败,因为由于以下错误,IID为"{00020970-0000-0000-C000-000000000046}"的接口的COM组件上的QueryInterface调用失败:不支持此类接口(HRESULT异常:0x80004002(E_NOINTERFACE)) .

有人告诉我编辑注册表,但我的注册表中不存在IID"{00020970-0000-0000-C000-000000000046}".

.net com ms-office office-interop

8
推荐指数
1
解决办法
9727
查看次数

密码保护时显示错误OpenXml Word文档在Office 2010中作为受密码保护的二进制Word重新保存

在Microsoft Word中,我创建了openxml.doc(*.docx)文件,将凭据'abc'作为Readpassword,将'xyz'作为WritePassword.

现在我必须将openxml.doc转换为binary.doc(WdSaveFormat = 0),使用下面的代码将文档作为Binary.doc成功创建

// Convert OpenXml.doc into binary.doc    
Convert(@"C:\Test\OpenXml.doc", @"C:\Test\binary.doc", WdSaveFormat.wdFormatDocument);

// Convert a Word .docx to Word 2003 .doc
public static void Convert(string input, string output, WdSaveFormat format)
{
    // Create an instance of Word.exe
    Word._Application oWord = new Word.Application();

    // Make this instance of word invisible (Can still see it in the taskmgr).
    oWord.Visible = false;

    // Interop requires objects.
    object oMissing = System.Reflection.Missing.Value;
    object isVisible = true;
    object readOnly = false;
    object oInput = input; …
Run Code Online (Sandbox Code Playgroud)

.net c# com ms-word office-interop

8
推荐指数
1
解决办法
286
查看次数

C#Excel Interop循环遍历单元格时速度慢

我试图从C#中的Excel文档中提取所有文本数据,并且遇到了性能问题.在下面的代码中,我打开工作簿,遍历所有工作表,并循环使用范围内的所有单元格,随时从每个单元格中提取文本.问题是,这需要14秒才能执行.

public class ExcelFile
{
    public string Path = @"C:\test.xlsx";
    private Excel.Application xl = new Excel.Application();
    private Excel.Workbook WB;
    public string FullText;
    private Excel.Range rng;
    private Dictionary<string, string> Variables;
    public ExcelFile()
    {
        WB = xl.Workbooks.Open(Path);
        xl.Visible = true;
        foreach (Excel.Worksheet CurrentWS in WB.Worksheets)
        {
            rng = CurrentWS.UsedRange;
            for (int i = 1; i < rng.Count; i++)
            { FullText += rng.Cells[i].Value; }
        }
        WB.Close(false);
        xl.Quit();
    }
}
Run Code Online (Sandbox Code Playgroud)

而在VBA中我会做这样的事情,需要大约1秒钟:

Sub run()
    Dim strText As String
    For Each ws In ActiveWorkbook.Sheets
        For Each …
Run Code Online (Sandbox Code Playgroud)

c# excel performance office-interop

8
推荐指数
2
解决办法
5290
查看次数