coy 的技术博客

2008年6月26日 #

Excel 错误: Cannot use object linking and embedding

这段时间突然打开EXCEL的时候出现问题,弹出对话框说“Cannot use object linking and embedding”,如果继续使用的话,EXCEL会出现很多不正常的现象,如不能拷贝单元格等。

原因:
点击OK,EXCEL继续提示是关于VBA的一个错误。在网上找了很久没有找到答案,但注意到了有人说是DCOM设置的问题,具体是什么问题没说清楚。
我突然想起来前一阵做C#程序操作EXCEL的时候确实在DCOM里面做过设置,是不是那里出了问题。但我并不抱太多希望,因为改DCOM设置那是很久以前的事情了,至少有好几个月。而这个错误却是昨天才出现的。带着怀疑的态度去DCOM里看了一下,结果真的发现了问题!
打开命令行,运行dcomcnfg,找到Component Services->Computers->My Computer->DCOM Config->Microsoft Excel Application 右键看属性,在Identity页里是指定运行EXCEL的用户。一般来说都是选的第二项The Launching User,而我这里选的是第三项,This user,然后指定了我自己的域帐号和密码。我把这个设置改回默认设置,即第二项The Launching User,退出设置,打开EXCEL文件,一切问题都解决了!!!

为什么我以前要那样设置?这是因为那次在做程序操作EXCEL的时候为修改EXCEL访问权限问题而把它改成了指定用户。
为什么以前是好的而现在出错?因为我正好是昨天修改了域登录密码,结果以前在那里指定的用户名密码就不对了,所以打开EXCEL时出错。

posted @ 2008-06-26 12:47 coy 阅读(75) | 评论 (2)编辑

2008年3月16日 #

Apache+PHP+MySQL在Windows下的安装和配置

环境:本文中用的都是当前最新的环境
apache 2.2.8+php 5.2.5+mysql 5.0.18

关于Apache+PHP+MySQL的安装和配置已经有大量的文章介绍过了,但是我按照PHP的官方文档和很多网上的文章都尝试过结果都没能成功,最后发现,第一,有的文章介绍的是老版本,配置方法已经不适用于我用的最新版本。第二,很多地方配置方法有很多种,有时候不知道要用哪一种,而如果前后的配置方法不一致的话就会造成问题。我尝试了很多办法费了好大劲才把它们配置好,本文将针对前面介绍的环境给出一种切实可行的配置方法。


一、安装apache
我是在apache的官方网站上下载的apache_2.2.8-win32-x86-no_ssl.msi,按照安装向导安装应该不会有什么问题,我是安装成了Windows的服务,端口设在8080。不过我的运气真的很差,在安装的时候确实碰到了问题,Windows服务没有装上去!在Monitor Apache Server里面没有看到任何服务,也就是说Service Status里面是空的。(一般来说是不会有这个问题的,我也不知道为什么会出现那样的问题)最后找到的解决办法是在命令行下运行httpd.exe -k install -n apache,这个命令可以手工地把apache加到Service里面去,httpd.exe在apache的安装目录的bin目录下。
apache安装完后暂时先不需要对conf\httpd.conf文件做任何修改,等会儿配置PHP的时候是需要更改httpd.conf文件的,但现在先让我们保持所有的默认设置。此时站点根目录在apache安装目录下的htdocs下。

二、安装MySQL
我是在MySQL的官方网站上下载的mysql-5.0.18-win32.zip。同样按照安装向导安装应该不会有什么问题。但我的运气真的是很差很差,好像是因为我的机器以前安装并卸载过mysql的原因,在安装完后的配置向导中出现ERROR 1045 (28000): Access denied for user 'root'@'localhost'的错误。最后我是这样解决的,先取消,然后重新运行配置向导(从开始菜单的mysql程序组中),这次它让我修改root的登录密码,我在老密码中让它为空(这应该是我上次安装时root的密码,然后填入新的密码,这样就配置成功了。如果你是第一次安装mysql,应该不会有这种问题的。
同样,我的mysql也是在服务中运行的。安装和配置完成后,你可以用下面的办法测试一下是否你的mysql可用:切换到mysql的安装目录的bin目录下,在命令行中输入mysql -u root -p回车,它提示你输入root的密码,输入你安装时设置的密码,如果没有就直接回车,如果出现mysql>的提示符就表示登录成功了。

三、安装和配置PHP
这是最容易出问题的一个环节,请仔细看好了。
我从PHP官方网站上下载了php-5.2.5-Win32.zip。这是一个可直接解压的非安装包文件。将它解压到c:\php文件夹。

1、让apache支持php
编辑apache的httpd.conf文件,加入下面几行:(最好是加在LoadModule块的下面,便于查找)
LoadModule php5_module c:/php/php5apache2_2.dll
AddType application/x-httpd-php .php3 .php
AddType application/x-httpd-php-source .phps

这样就可以了,不需要做其他任何事,你的apache就已经可以支持php了!这时候不要去碰什么"php.ini",把什么什么dll拷到system32目录等等。一步一步来,搞多了反而把你搞糊涂。
这里唯一要注意的是php5apache2_2.dll。老的php版本都是用的php5apache2.dll,如果你参考以前版本的文档,肯定会弄错,后果就是apache启动失败。不知道是不是我没看仔细,反正我在php官方的documentation上看到的都用的是错的(写的是php5apache2.dll)。后来是在那个文档的下面的“User Contributed Notes”上看到有人提出来的这个错误的。
修改完后要重新启动apache。你可以写个最简单的php文件试试:
在htdocs下建一个test.php,
<HTML>
<HEAD>
<TITLE>PHP Testing</TITLE>
</HEAD>
<BODY>
<?php phpinfo(); ?>
</BODY>
</HTML>

然后访问http://localhost:8080/test.php

2、php连接mysql数据库
1)将c:\php\libmysql.dll拷到windows的system32目录。
2)将c:\php\ext\php_mysql.dll拷到c:\php\下。
3)重命名c:\php\php.ini-recommended为php.ini。
4)编辑c:\php\php.ini
486行:extension_dir = "c:/php"
625行:去掉前面的分号(;)
5)编辑apache的httpd.conf文件,加入一行:
PHPIniDir "C:/php"
这是为了告诉apache php.ini文件的位置,如果不加这行也可以,但是要把你的php.ini文件拷到windows目录,我不喜欢那样做。
通过上面的设置,php就可以连接mysql数据库了。用下面的testmysql.php来测试:
<?php
$db_host='localhost';
$db_database='test';
$db_username='root';
$db_password='mypass';

$connection = mysql_connect($db_host, $db_username, $db_password);
if (!$connection){
die ("Could not connect to the database: <br />". mysql_error());
}
else{
echo "connected successfully!";
}
?>




 

 

posted @ 2008-03-16 00:16 coy 阅读(264) | 评论 (1)编辑

2007年11月25日 #

通过编程方式将Reporting Services 报表导出成Excel文件

Reporting Services的报表做好后,可以在查看报表时选择导出成EXCEL。这是Reporting Services自带的功能。
但是,这种方法必须是在查看报表时才能使用。有时候我不希望让用户进入查看报表的页面(觉得麻烦),或者我想一批自动生成很多报表的EXCEL文件供下载。这就只能通过编程方式实现了。
目的:连接某个报表,传入相关参数,直接生成EXCEL文件,放在WEB服务器上(注意不是Reporting Services的服务器)。
我写了一个类RSReport用来实现这个功能。
这里必须使用Reporting Services提供的一个Web Service,所以要加一个Web Reference: http://servername/ReportServer/ReportService.asmx
假设使用默认的命名空间WebReference。
下面的代码中:
_reportPath是报表路径如:/foldername/myreport1
_parameters是报表参数列表
_savePath是指定的EXCEL文件存放路径,是全路径名。如d:\myproject\tempfiles\report1.xls。
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Web.Services.Protocols;
using coysoft.WebReference;
using System.IO;

namespace coysoft.Reporting
{
    
public class RSReport
    
{
        
private string _reportPath;
        
private Hashtable _parameters = new Hashtable();
        
private string _renderFormat = "EXCEL";
        
private string _savePath;

        
public string SavePath
        
{
            
get return _savePath; }
            
set { _savePath = value; }
        }


        
public string RenderFormat
        
{
            
get return _renderFormat; }
            
set { _renderFormat = value; }
        }


        
public string ReportPath
        
{
            
get return _reportPath; }
            
set { _reportPath = value; }
        }


        
public void AddParameter(string parmKey, string parmValue)
        
{
            _parameters.Add(parmKey, parmValue);
        }


        
public void Render()
        
{
            ReportingService rs 
= new ReportingService();
            rs.Credentials 
= System.Net.CredentialCache.DefaultCredentials;
             rs.Timeout = 600000; //设置过期时间为10分钟

            
// Render arguments
            byte[] result = null;
            
string reportPath = _reportPath;
            
string format = _renderFormat;
            
string historyID = null;
            
string devInfo = @"<DeviceInfo><Toolbar>False</Toolbar></DeviceInfo>";

            
// Prepare report parameter.
            ParameterValue[] parameters = new ParameterValue[_parameters.Count];
            
int i = 0;
            
foreach(string key in _parameters.Keys)
            
{
                parameters[i] 
= new ParameterValue();
                parameters[i].Name 
= key;
                parameters[i].Value 
= Convert.ToString(_parameters[key]);
                i
++;
            }

            
            DataSourceCredentials[] credentials 
= null;
            
string showHideToggle = null;
            
string encoding;
            
string mimeType;
            Warning[] warnings 
= null;
            ParameterValue[] reportHistoryParameters 
= null;
            
string[] streamIDs = null;
            SessionHeader sh 
= new SessionHeader();
            rs.SessionHeaderValue 
= sh;

            
try
            
{
                result 
= rs.Render(reportPath, format, historyID, devInfo, parameters, credentials,
                   showHideToggle, 
out encoding, out mimeType, out reportHistoryParameters, out warnings,
                   
out streamIDs);
                sh.SessionId 
= rs.SessionHeaderValue.SessionId;
            }

            
catch (SoapException e)
            
{
                
throw e;
            }

            
// Write the contents of the report to an excel file.
            try
            
{
                FileStream stream 
= new FileStream(_savePath, FileMode.Create);
                stream.Write(result, 
0, result.Length);
                stream.Close();
            }

            
catch (Exception e)
            
{
                
throw e;
            }

        }

    }

}

posted @ 2007-11-25 13:16 coy 阅读(189) | 评论 (0)编辑

SQL 2000 Reporting Services 常见错误及解决办法

1. 报表服务器无法解密用于访问报表服务器数据库中的敏感数据或加密数据的对称密钥

rskeymgmt -d
rsconfig -d ReportServer -u sa -p password -e foobar

如果提示“未初始化报表服务器安装”,可以通过下面的两步解决:
1. 删除RS数据库中的加密数据
rskeymgmt -d
2. 手动激活Report Services
RSActivate.exe -c "c:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\RSReportServer.config" -t

2. The report server cannot open a connection to the report server database
服务器的名称的变更会导致出现这种错误。这时候只要重新设置一下数据库就可以了。
在命令行执行下面的命令:
rsconfig -c -slocalhost -dReportServer -aWindows

其中:
localhost是机器名称,ReportServer是报表数据库的名称,Windows表示用集成验证。

3. The underlying connection was closed: Unable to connect to the remote server.
这种错误一般是因为Reporting Services管理端配置文件中指定的管理端路径不正确。导致配置不正确可能是机器名改变,端口改变,或IIS中把http访问方式改成了https安全访问方式。
解决的办法如下:
打开文件管理端配置文件:
C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportManager\RSWebApplication.config
找到URL,如 http://servername/ReportServer,改成正确的路径,注意是http还是https,端口号是否正确,机器名是否正确。

4. The stream cannot be found. The stream identifier that is provided to an operation cannot be located in the report server database. (rsStreamNotFound)
打开数据库ReportServer的表ConfigurationInfo,修改UseSessionCookies的值为false。然后iisreset即可。


 

posted @ 2007-11-25 11:19 coy 阅读(125) | 评论 (0)编辑