为了合并两个 Excel 表,我使用了下面的代码。
using System;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
namespace MergeWorkBooks
{
class Program
{
static void Main(string[] args)
{
Excel.Application app = new Excel.Application();
app.Visible = true;
app.Workbooks.Add("");
app.Workbooks.Add(@"c:\MyWork\WorkBook1.xls");
app.Workbooks.Add(@"c:\MyWork\WorkBook2.xls");
for (int i = 2; i <= app.Workbooks.Count; i++)
{
int count = app.Workbooks[i].Worksheets.Count;
app.Workbooks[i].Activate();
for (int j=1; j <= count; j++)
{
Excel._Worksheet ws = (Excel._Worksheet)app.Workbooks[i].Worksheets[j];
ws.Select(Type.Missing);
ws.Cells.Select();
Excel.Range sel = (Excel.Range)app.Selection;
sel.Copy(Type.Missing);
Excel._Worksheet sheet = (Excel._Worksheet)app.Workbooks[1].Worksheets.Add(
Type.Missing, Type.Missing, Type.Missing, Type.Missing
);
sheet.Paste(Type.Missing, Type.Missing);
}
} …Run Code Online (Sandbox Code Playgroud) 我编写了一个代码来从 Excel 文件中读取一列。我在此使用 Microsoft.Office.Interop.Excel,首先读取整个范围,然后写入 System.Array,然后对 System.Array 值进行一些操作,最后将其转换为 List,因为我填充了一个 ListBox 元素。这是代码(仅相关部分):
private List<string> bd = new List<string>();
private static System.Array objRowAValues;
private List<string> bl = new List<string>();
private static System.Array objRowBValues;
private List<string> cm = new List<string>();
private static System.Array objRowCValues;
private List<string> pl = new List<string>();
private List<string> bdCleanList;
private static Microsoft.Office.Interop.Excel.Application appExcel;
Excel.Application xlApp;
Excel.Workbook xlWorkBook;
Excel.Worksheet xlWorkSheet;
Excel.Range rngARowLast, rngBRowLast, rngCRowLast;
long lastACell, lastBCell, lastCCell, fullRow;
private void btnCargarExcel_Click(object sender, EventArgs e)
{
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{ …Run Code Online (Sandbox Code Playgroud) 这是我的SaveAs方法代码:
m_FilePath="D:\Build\abc.xlsx"
m_objOpt=System.Reflection.Missing.Value;
m_objBook.SaveAs(m_FilePath, m_objOpt, m_objOpt,
m_objOpt, m_objOpt, m_objOpt, XlSaveAsAccessMode.xlShared,
m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
Run Code Online (Sandbox Code Playgroud)
现在我的问题不是如何禁用兼容性检查器,这已经被多次回答了。我的问题是为什么兼容性检查器会出现。excel怎么知道文件有excel 2003的痕迹。D:\Build是空的。
我有一个 ASP.NET 应用程序,它使用 Microsoft intrope 程序集来读取、写入和修改 excel 文件,它在服务器计算机上使用 Excel 2013。如果我以管理员身份登录到服务器机器,应用程序工作正常,但是当我注销时,应用程序无法初始化 Excel 应用程序。这是例外。
System.Runtime.InteropServices.COMException (0x8000401A)
Run Code Online (Sandbox Code Playgroud)
应用程序在带有 MS Excel 2013 32 位的 Windows Server 2008R2 上运行我无法找出这种行为的原因。这是关于 COM 对象安全选项还是与 IIS 权限有关?
我在尝试与 Excel 文档建立连接以更改所有没有填充的行的颜色时收到此错误。
我已阅读错误日志,它指出我的错误位于以下代码部分:
try
{
foreach (Excel.Range row in rows)
{
if (row.Cells.EntireRow.Interior.ColorIndex == -4142) //error is Here
{
row.Interior.Color = System.Drawing.Color.Red;
}
}
workbook.Save();
workbook.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
Marshal.ReleaseComObject(workbook);
Marshal.ReleaseComObject(worksheet);
Marshal.ReleaseComObject(application);
Run Code Online (Sandbox Code Playgroud)
有谁知道是什么导致了这个错误,如果是的话如何解决它?
我正在Microsoft Dynamics AX 2009中生成Excel文件.我想从第9行在Excel中创建一个表.即使我设置了一个范围,表格总是显示在单元格A1上.
SysExcelRange xlsRange;
SysExcelListObject listObj;
#define.ListObjectName("xlGuess")
Run Code Online (Sandbox Code Playgroud)
...
xlsRange = xlsWorkSheet.range("A9");
listObj = xlsWorkSheet.listObjects().add(xlsRange, #ListObjectName);
Run Code Online (Sandbox Code Playgroud)
我也尝试设置全范围如"A9:E13"和"A9:A13",但它也没有用.也许,它可以用COM对象来做,但我无法实现它.为什么它不起作用?
我有一个使用 Excel Interop 生成 Excel 电子表格的 Winforms 应用程序。
当我尝试以这种方式保存工作表时:
_xlBook.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
Run Code Online (Sandbox Code Playgroud)
...它会失败,告诉我,“ System.Runtime.InteropServices.InvalidComObjectException 未处理 HResult=-2146233049 Message=COM 对象已与其底层 RCW 分离,无法使用。 ”
不过,这没有多大意义——我并没有对线程之类的东西做任何花哨的事情;这是一个非常简单的香草实用程序。代码中唯一引用 _xlBook 的其他地方是:
1)
private Excel.Workbook _xlBook;
Run Code Online (Sandbox Code Playgroud)
2)
_xlBook = _xlApp.Workbooks.Add(Type.Missing);
Run Code Online (Sandbox Code Playgroud)
3)
_xlSheets = _xlBook.Worksheets;
_xlSheet = (Excel.Worksheet)_xlSheets.Item[1];
Run Code Online (Sandbox Code Playgroud)
4)
_xlBook.Close(false);
Marshal.ReleaseComObject(_xlBook);
Run Code Online (Sandbox Code Playgroud)
_xlBook 被处理的最后一部分是从表单的 Deactivate 事件调用的,它是:
private void FormMain_Deactivate(object sender, EventArgs e)
{
DeinitializeExcelObjects();
}
Run Code Online (Sandbox Code Playgroud)
问题是(我在所有引用 _xlBook 的地方放置断点后发现的)FormMain_Deactivate() 在 _xlBook.SaveAs() 被调用之前被调用,当点击“运行”按钮时调用。
一旦我在 FormMain_Deactivate() 中注释掉对 DeinitializeExcelObjects() 的调用,并在调用 _xlBook.SaveAs() 之后立即调用它,它就可以正常工作 - …
我正在尝试创建一个WorksheetExcel文件的数组,但我找不到正确的演员.
这是代码:
Excel.Application app = new Excel.Application();
Excel.Workbook book = app.Workbooks.Open(pathFile);
int numSheet = book.Worksheets.Count;
Excel.Worksheet[] sheets = new Excel.Worksheet[numSheet];
sheets = (Excel.Worksheet[])book.Worksheets;
Run Code Online (Sandbox Code Playgroud)
正如您从代码中看到的那样,我尝试使用该演员,但这是多余的.我该如何解决这个问题?
我正在使用C#excel互操作框架自动为我的公司生成一堆报告,我想知道是否有人知道如何使用此方法拖动方程式.
如果我能用命名范围做到这一点,那就更好了,但是即使我必须对行进行硬编码,所以它沿着A10:J10向下线A20:J20这样做可能没问题.
即使是任何指向如何做到这一点的网页的指针也会非常感激,因为我有点困在这个上面.
谢谢!
我尝试使用SaveAs()来保存Excel电子表格数据(包含8张纸,一些包含15000行的纸张),但SaveAS()永远不会返回.如果我删除一些工作表,它将成功保存到硬盘文件.有没有办法可以保存整个巨大的电子表格而不挂?
非常感谢.
///////// my c# code to save Excel data:
xlWorkBook.SaveAs(outFileName,
Excel.XlFileFormat.xlWorkbookNormal,
Type.Missing,
Type.Missing,
false,
false,
Excel.XlSaveAsAccessMode.xlExclusive,
false,
false,
Type.Missing,
Type.Missing,
Type.Missing);
xlWorkBook.Close(true, misValue, misValue);
xlApp.Quit();
Run Code Online (Sandbox Code Playgroud)